简单的问题,但我无法在任何地方找到解决方案。 我有1个ActionResult,1个PostResult和1个View。 在Get方法中,我从模型中初始化了一些部分。 之后在视图中我初始化另一部分。 当模型进入Post方法时,它没有很好地初始化。 如何通过View和Methods传递数据? 我不想使用临时对象。
示例:
[HttpGet]
public ActionResult Register(Guid product_id)
{
RegistrationModel model = new RegistrationModel();
model.Product = **someProduct**;
return View(model);
}
[HttpPost]
public string Register(RegistrationModel model, Product Product)
{
Here the objects comes initialized only with the parts from the view...
}
答案 0 :(得分:3)
您需要了解MVC的工作原理。
有一个名为模型绑定的概念,它负责使用 合适的 HTML映射Model
。
当我说 合适 时,我的意思是它需要根据特定规则进行格式化。
为了简化这些事情,MVC内置了HtmlHelpers
来处理Model
属性到HTML元素之间的转换。
您可以从[HttpGet]
方法返回:
1)无模型视图return View();
2)具有空白模型return View(new Product());
3)包含一些数据的模型的视图return View(product);
在视图中,您应该决定:
1)如果您只想显示模型,可以使用(可能不会包含在form
中):
HtmlHelpers
,例如@Html.DisplayFor(x => x.Name)
简单模型调用,如<h1>@Model.Name</h1>
2)如果您希望某些数据回发到您的[HttpPost]
,您应该
注意将模型的属性“映射”到HTML元素,特别是(所有内容都包含在form
内):
通过HtmlHelpers
之类@Html.TextBoxFor(x => x.Price)
生成“合适的”HTML输出:<input id="Price" name="Price" value="">52.00</input>
(推荐)
通过格式良好的HTML( 合适的 ^ _ ^):
<select id="SelectedLanguageId" name="SelectedLanguageId">
<option value="1">English</option>
<option value="2">Russian</option>
</select>
1)如果您希望收到返回[HttpPost]
方法的内容,则应在其中包含suitable
HTML元素。
2)如果您只想显示某些数据,您只需调用模型的属性
3)使用HTML帮助程序而不是原始HTML代码。
复杂Model
的模型绑定是通过 EditorTemplates ,循环中的隐藏输入,不同类型的序列化等来实现的。