如何在 ASP.NET MVC 中执行辅助操作(即计算字段)?
Posted
技术标签:
【中文标题】如何在 ASP.NET MVC 中执行辅助操作(即计算字段)?【英文标题】:How do I perform a secondary action (i.e. calculate fields) in 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>
【问题讨论】:
【参考方案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】:一个动作链接只是链接到一个动作。它转换为<a href="action">action</a>
标签。它链接到的操作不知道它刚刚离开的页面的状态。
您可能应该“发布”到一个动作,但它只会发送表单数据,而不是一个对象(尽管 mvc 可以自动将表单字段映射到一个对象)。
【讨论】:
好的,这可能会有所帮助。如果我正在做的不是表单提交,我似乎无法弄清楚如何将表单数据映射到对象。 我有一组字段与一些基于服务器的计算相结合以填充另一组字段。所有字段都在模型中 因此将修改后的字段发布到新操作,并发布要更新的模型的标识符。在您的操作中,根据标识符加载模型,然后替换为修改后的值?以上是关于如何在 ASP.NET MVC 中执行辅助操作(即计算字段)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 中的控制器之外生成 URL?
(转)表单和HTML辅助方法 - ASP.NET MVC 3
Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5