c#controllers post过滤器

时间:2016-05-05 11:13:06

标签: c# controller asp.net-mvc-5

我只是在这里寻求一些“最佳实践”信息。 假设我有一个控制器,例如

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]从那里开始我的行动?

2 个答案:

答案 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将使用的名称 在对象中。