我需要对ASP.NET MVC View进行一些计算,这是一种与表单提交不同的操作。我已尝试过各种方法通过ActionLink将当前Model传递给新的控制器操作,但该模型似乎没有传递。
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>
答案 0 :(得分: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"));
}
}
答案 1 :(得分:0)
操作链接只链接到某个操作。它转换为<a href="action">action</a>
标记。它链接到的动作不知道它刚刚离开的页面的状态。
你可能应该对一个动作进行“POST”,但它只会发送表单数据,而不是一个对象(尽管mvc可以自动将表单字段映射到一个对象)。