Как выполнить вторичное действие (т.е. Вычислять поля) в ASP.NET MVC?

Мне нужно сделать некоторые вычисления в 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, но столкнулся с той же проблемой

Изменить: "Дайте вашим кнопкам отправки имя, а затем просмотрите представленное значение в методе контроллера", показанный здесь, что Я искал.

Ответы

Ответ 1

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

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

<% 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"));
    }

}

Ответ 2

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

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