2013-05-20 41 views
1

我是新来的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”)//在此应该将城市和街道渲染为

我的局部视图将具有somethign这样的: @ 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,但现在在我的部分观点中,我也希望从我的模型中提取的这些propeties中的很少一部分能够正确呈现,并且在提交表单后应该可以使用与所有其他属性相同的模型。

所以我的问题,在发送部分视图的动作中,我是否应该真正实例化模型的新实例?但是,那么数据将在模型的两个实例之间分开?

如何安排,那我该如何将数据从局部视图分配到一般视图模型?

回答

4

我没有得到你的问题,但你可以用HttpGetHttpPost具有相同名称注释ActionResults(但不同的签名,因为他们毕竟是方法)中,你必须做一些观点类似

[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中发布的值名称和模型的属性之间的匹配,并自动绑定该值

+0

不,您不是真的明白,生病尝试使用代码完整示例。 .. – Alnedru

+0

这将有助于了解问题 – dakait