我只是在这里寻求一些“最佳实践”信息。 假设我有一个控制器,例如
public ActionResult Create([Bind(Include="Title,Content")] Models.MyReport report)
在表格(视图)上,我给出以下内容
<div class="btn-group" role="group">
<button type="submit" name="action" value="Add" class="btn btn-primary">Create</button>
<button type="submit" name="action" value="Cancel" class="btn btn-default">Cancel</button>
</div>
因此,如果他们点击创建它创建报告,取消取消它并将它们返回到列表屏幕(假设)
是否有类似[HttpPost]或[ValidateAntiForgeryToken]的过滤器,我应该使用。
或者我应该只使用控制器中的request.form[action]
从那里开始我的行动?
答案 0 :(得分:0)
表单应该只有一个提交输入。将取消按钮更改为“按钮”类型甚至制作,将其设为链接:
<button type="submit" name="action" value="Add" class="btn btn-primary">Create</button>
<a href="#" class="btn btn-default">Cancel</button>
如果你的控制器动作用HttpPost属性修饰,那么表单类型应该是post。
如果你有防伪属性,那么表单上的第一个输入应该是带有令牌的隐藏输入。有一个Html扩展为你呈现这个。
答案 1 :(得分:0)
因此答案就是
public ActionResult Create([Bind(Include="Title,Content")] Models.MyReport report,string action)
然后在控制器中你可以做
if(action == 'create') {
//create action
}
else if(action="cancel") {
//do something else
}
这里还有一个值得学习的教训,你可以向控制器添加尽可能多的“自定义”变量,c#/ mvc会将get / post变量映射到它们。
您通过displayFor设置的名称将具有c#/ mvc将使用的名称 在对象中。