2012-04-06 51 views
2

任何輸入大大appriciated :)如何發佈部分查看數據

我想知道一兩件事,我是否能在MVC發佈多個局部視圖中的數據?(指我想更新部分vews數據DATBASE)

下面是實施例:

型號: -

public class PassengerViewModel 
{ 
    public List<PassengerModel> Passengers { get; set; } 
    public ContactModel Contact { get; set; } 
} 

控制器: -

[RequiredAuthentication] 
    public ActionResult Passenger() 
    { 
     var passengrViewMdl = new PassengerViewModel() 
     { 
      Contact = new ContactModel(), 
      Passengers = psngrService.LoadPassengers(Convert.ToInt32(Session["LPORefNO"])) 
     }; 
     return View(passengrViewMdl); 
    } 
    [HttpPost] 
    public ActionResult Passenger(PassengerViewModel passengerViewModel) 
    { 
     Here i want to update Passengers & Contact information 
    } 

查看: -

@model QR.LPO.Core.Models.PassengerViewModel 
@{ 
ViewBag.Title = "Add Passengers"; 
} 
@using (Html.BeginForm()) 
{ 
@Html.Partial("_Passenger", Model.Passengers); 
@Html.Partial("_PassengerContact", Model.Contact); 
<input type="submit" value="Submit" /> 
} 

感謝。

回答

1

是的,的確,你可以,但是,控制器通常只對每個請求使用一個模型,所以無論是你的模型都應該在其中聲明部分子模型或子模型本身的屬性。

這可能是由於HTML規範,表單上的所有數據,它已提交buttom發送提交動作url。

1

這幾乎可以像你一樣工作 - 對於阻止這種情況的部分內容沒有任何內在的意義,最終輸出的html是重要的。

與您的代碼的問題是,你的_Passenger鑑於可能的模式是Passengers型的和你_PassangerContact視圖的模型是Contact類型。這意味着如果標準HtmlHelper擴展名(例如Html.Textbox(...)Html.TextboxFor(...))所生成的字段不會包含像Contact.Name這樣的完整名稱,而只是相對於其模型的名稱,如Name。這會導致模型綁定在您的發佈操作中失敗。

您可以通過多種方式解決這個問題。

  1. 在子視圖只需使用同一型號(PassengerViewModel),並編寫代碼就像@Html.TextboxFor(m => m.Contact.Name)

  2. 而不是使用Html.Partial,請使用Html.EditorFor(...)。這將正確的前綴信息傳遞給子視圖,以便正確生成字段名稱。

  3. 精確設置前綴自己

像這樣:

@{ 
    var childViewData = new ViewDataDictionary(this.ViewData); 
    childView.TemplateInfo.HtmlFieldPrefix = "Contact"; 
} 
@Html.Partial("_PassengerContact", Model.Contact, childViewData) 

你也可以看看創建Html.PartialFor超負荷自己,在這個計算器問題描述:ASP.NET MVC partial views: input name prefixes