2

我需要对 ASP.NET MVC 视图进行一些计算,这是一个不同于表单提交的操作。我尝试了各种通过 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 方法,但遇到了同样的问题

编辑:“给你的提交按钮一个名字,然后在你的控制器方法中检查提交的值”这里显示的方法是我正在寻找的。

4

2 回答 2

6

[看到你的评论;我将在此处重新发布此答案,以便您可以将问题标记为已解决,并将其标记为社区 wiki,这样我就不会得到代表 - 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"));
    }

}
于 2009-03-17T11:44:10.700 回答
0

一个动作链接只是链接到一个动作。它转换为<a href="action">action</a>标签。它链接到的操作不知道它刚刚离开的页面的状态。

您可能应该“发布”到一个动作,但它只会发送表单数据,而不是一个对象(尽管 mvc 可以自动将表单字段映射到一个对象)。

于 2009-03-16T13:14:24.610 回答