在表单操作属性中使用隐藏输入或查询字符串变量更好吗?

时间:2011-12-08 16:54:43

标签: asp.net-mvc asp.net-mvc-3

假设我的控制器看起来像这样

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并不关心,因为它将被转换为方法参数。我想知道这样做的“最佳实践”是什么。

注意:我没有故意在这个例子中使用任何助手。我发现它们更有限,然后“有帮助”。

2 个答案:

答案 0 :(得分:2)

没有更好的方式。两者都很好。第一个将id作为查询字符串的一部分发送,允许用户将结果页面加入书签并稍后返回(如果你当然删除了[HttpPost])。第二个将id作为POST请求体的一部分发送,因此用户无法直接看到它。

答案 1 :(得分:0)

达林说,你也可以这样做。这取决于你。

但是,由于您正在进行POST,您可能只想使用查询字符串参数进行记录选择,并使用其他表单元素来发布实际数据。

如果您正在执行GET(只应在返回记录或其他非状态更改操作时执行),则查询字符串是您唯一的选项,浏览器将自动将任何表单元素添加到查询字符串(因此,如果明确地将其作为查询字符串,则无关紧要。)