Как мне выполнить вторичное действие (то есть вычислить поля) в ASP.NET MVC? - PullRequest
2 голосов
/ 16 марта 2009

Мне нужно выполнить некоторые вычисления в ASP.NET MVC View, действие, отличное от отправки формы. Я пробовал различные способы передачи текущей Модели новому действию контроллера через ActionLink, но модель, похоже, не передается.

public ActionResult Calculate(MuralProject proj)
{
    ProjectFormRepository db = new ProjectFormRepository();
    List<Constant> constants = db.GetConstantsByFormType(FormTypeEnum.Murals);

    proj.Materials = new MuralMaterials();
    proj.Materials.Volunteers = this.GetVolunteerCount(constants, proj);

    this.InitializeView(); 
    return View("View", proj);
}

Каким должен быть мой синтаксис Html.ActionLink, чтобы я мог вызвать его, и чтобы у возвращающегося представления были те же данные модели (с вычисленными изменениями)? С другой стороны, есть ли другой способ сделать это?

Я также попробовал метод Ajax.ActionLink, но столкнулся с той же проблемой

Редактировать : «Укажите для кнопок отправки имя, а затем проверьте отправленное значение в методе вашего контроллера», показанный здесь - это то, что я искал.

Ответы [ 2 ]

6 голосов
/ 17 марта 2009

[видел ваши комментарии; Я опубликую этот ответ здесь, чтобы вы могли отметить разрешенный вопрос и отметить его вики сообщества, чтобы я не получал за него ответа - Дилан

Дайте вашим кнопкам отправки имя, а затем проверьте отправленное значение в методе вашего контроллера:

<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" name="submitButton" value="Send" />
<input type="submit" name="submitButton" value="Cancel" />
<% Html.EndForm(); %>

отправка

public class MyController : Controller {
    public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Send":
                // delegate sending to another controller action
                return(Send());
            case "Cancel":
                // call another action to perform the cancellation
                return(Cancel());
            default:
                // If they've submitted the form without a submitButton, 
                // just return the view again.
                return(View());
        }
    }

    private ActionResult Cancel() {
        // process the cancellation request here.
        return(View("Cancelled"));
    }

    private ActionResult Send() {
        // perform the actual send operation here.
        return(View("SendConfirmed"));
    }

}
0 голосов
/ 16 марта 2009

Ссылка на действие просто ссылается на действие. Это переводит тег <a href="action">action</a>. Действие, на которое оно ссылается, не имеет представления о состоянии только что оставленной страницы.

Вероятно, вы должны 'POST' вызывать действие, но оно будет отправлять только данные формы, а не объект (хотя mvc может автоматически сопоставлять поля формы с объектом).

...