【问题标题】:How do I perform a secondary action (i.e. calculate fields) in ASP.NET MVC?如何在 ASP.NET MVC 中执行辅助操作(即计算字段)?
【发布时间】:2009-03-16 07:06:33
【问题描述】:

我需要对 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 方法,但遇到了同样的问题

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

【问题讨论】:

    标签: asp.net-mvc view actionresult


    【解决方案1】:

    [看到你的cmets;我将在此处重新发布此答案,以便您可以将问题标记为已解决,并将其标记为社区 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"));
        }
    
    }
    

    【讨论】:

    • 如果我们不得不做这样的事情,这很令人沮丧,“关注点分离”的论点发生了什么?微软 hoo haa 营销花言巧语!我很沮丧,这是一个框架可以为这种常见场景提供的最好的方法
    • 您觉得哪些问题没有被明确区分?如果魔术字符串困扰您,可以轻松设置包含按钮标题和值的静态类或外部资源文件,这样您就不必依赖魔术字符串比较。
    • 如何将数据传递给适当的操作?
    【解决方案2】:

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

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

    【讨论】:

    • 好的,这可能会有所帮助。如果我正在做的不是表单提交,我似乎无法弄清楚如何将表单数据映射到对象。
    • 我有一组字段与一些基于服务器的计算相结合以填充另一组字段。所有字段都在模型中
    • 因此将修改后的字段发布到新操作,并发布要更新的模型的标识符。在您的操作中,根据标识符加载模型,然后替换为修改后的值?
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多