假设我的控制器看起来像这样
public ActionResult DoSomething(int id)
{
Customer c = GetCustomerByID(id);
return View(c);
}
[HttpPost]
public ActionResult DoSomething(int id, FormCollection formData)
{
Customer c = GetCustomerByID(id);
//Do something here
return View(c);
}
提交表单时发送ID的最佳方式是什么。有两个选项
<form method="post" action="@Url.Action("DoSomething", "Customer", new { id = Model.ID })">
</form>
或者
<form method="post" action="@Url.Action("DoSomething", "Customer")">
<input type="hidden" value="@Model.ID" />
</form>
id的值以两种不同的方式传递,但Controller并不关心,因为它将被转换为方法参数。我想知道这样做的“最佳实践”是什么。
注意:我没有故意在这个例子中使用任何助手。我发现它们更有限,然后“有帮助”。
答案 0 :(得分:2)
没有更好的方式。两者都很好。第一个将id作为查询字符串的一部分发送,允许用户将结果页面加入书签并稍后返回(如果你当然删除了[HttpPost]
)。第二个将id作为POST请求体的一部分发送,因此用户无法直接看到它。
答案 1 :(得分:0)
达林说,你也可以这样做。这取决于你。
但是,由于您正在进行POST,您可能只想使用查询字符串参数进行记录选择,并使用其他表单元素来发布实际数据。
如果您正在执行GET(只应在返回记录或其他非状态更改操作时执行),则查询字符串是您唯一的选项,浏览器将自动将任何表单元素添加到查询字符串(因此,如果明确地将其作为查询字符串,则无关紧要。)