如何将(绑定的)模型从视图传递回不是[httppost]的控制器方法?
查看:
@Html.EditorFor(model => model.Name)
@Html.DisplayFor(model => model.Model)
// Table displays more properties of model
<input type="button" title="GetStuff" value="Get Stuff" onclick="location.href='@Url.Action("GetStuff")'" />
控制器方法:
public ActionResult GetStuff(ViewModel Model /* Realize this is non-httppost but...how can I get the model back with this type of scenario */)
{
// Get the name from per the model of the main view if the user changed it
string theName = Model.Name;
Model2 m2 = new Model2(){name = theName};
return ("someView", Model2);
}
答案 0 :(得分:2)
由于您在GET请求中传递数据的方式是通过查询字符串,因此您必须将所有数据放在查询字符串中。模型绑定可能起作用,至少对于简单模型,但您必须明确包含操作中的所有数据。例如:
@Url.Action("GetStuff", new { Name = Model.Name, Model = Model.Model })
但是如果这些数据中的任何一个很复杂,你就必须自己指定每个子属性......也许你应该发布? :)
答案 1 :(得分:2)
不是编写自己的查询字符串,只需将您的EditorFor内容包装在使用的Html.BeginForm()语句中,从按钮中删除Javascript,然后将按钮更改为提交类型。
@using (Html.BeginForm("GetStuff", "Controller", FormMethod.Get)
{
@Html.EditorFor(model => model.Name)
@Html.DisplayFor(model => model.Model)
// Table displays more properties of model
<input type="submit" title="GetStuff" value="Get Stuff"/>
}
FormMethod.Get会将表单元素的查询字符串请求发送到Html.BeginForm定义中定义的action / controller。