我是MVC 3的新手,我对正确的方法有疑问。
想象一下,我有一个模特:
public class MyCustomModel
{
[Required]
public string UserName { get; set; }
[Required]
public DateTime? Birthdate { get; set; }
[Required]
public string City {get;set;} //To partial view
[Required]
public string Street {get;set;} //To partial view
}
在这里我有一个观点
@ Html.TextBoxFor(m => m.UserName) @ Html.TextBoxFor(m => m.BirthDate) @ Html.Action(“LocationGroup”,“Home”)//在此应该呈现城市和街道
我的部分视图会有类似的东西: @ Html.TextBoxFor(m => m.City) @ Html.TextBoxFor(m => m.Street)
这是控制器中的动作:
[ChildActionOnly]
public ActionResult LocationGroup()
{
MyCustomModel model = new MyCustomModel (); //Should i really instantiate a new instace of the model??? and pass it to the partial view
return PartialView("_TempView", model);
}
基本上我的一般视图将包含texboxex的所有字段,但现在在我的部分视图中,我也希望我的模型中很少有这些特性能够正确呈现,并且在提交表单后应该可以在同一模型中使用所有其他财产。
所以我的问题,在发回局部视图的动作中,我是否应该真正实例化模型的新实例?但是,数据将在模型的2个实例之间分割?
如何安排,如何从局部视图中将数据分配到一般视图模型?
答案 0 :(得分:4)
我没有得到你的问题,但你可以注释ActionResults与HttpGet
和HttpPost
具有相同的名称(但不同的签名,因为它们毕竟是方法),如
[HttpGet]
[ChildActionOnly]
public ActionResult LocationGroup()
{
Model model = new Model();
return PartialView("_TempView", model);
}
在视图中你必须做类似
的事情@model YOURMODELNAME
@using(Html.BeginForm("LocationGroup","Controller",FormMethod.POST)){
@Html.TextBoxFor(x=>x.UserName)
@Html.TextBoxFor(x=>x.Birthdate )
<input type="submit" value="submit" />
}
现在定义一个帖子类型ActionResult
[HttpPost]
[ChildActionOnly]
public ActionResult LocationGroup(YOUR_MODEL_TYPE model)
{
if(ModelState.IsValid){
//do something
}
}
默认模型绑定器将查看HttpContext以查找已发布的值名称与模型属性之间的匹配,并自动绑定值