2015-06-16 184 views
1

一些奇怪的MVC模型性質正在發生的事情,我無法理解爲什麼..這裏的情景 -返回默認值

我有幾個屬性的模型,當我填充模型在模型的屬性確實有值設置(通過放置斷點進行檢查)。它也出現在視圖中,但不會顯示在文本框中。它顯示了默認值(通過查看頁面上的項目文本框,因爲它具有0而猜測)。

下面是我的模型 -

public class PriceEnquiryModel 
{ 
    [DisplayName("Item")] 
    public int item { get; set; } 

    [DisplayName("Description")] 
    public string description { get; set; } 

    [DisplayName("UOP")] 
    public string uop { get; set; } 

    [DisplayName("UOS")] 
    public string uos { get; set; } 

    [DisplayName("Pack Description")] 
    public string pack_description { get; set; } 

    [DisplayName("Pack Size")] 
    public string PackSize { get; set; } 
} 

這是控制器的代碼爲 -

public ActionResult Search(PriceEnquiryModel price) 
{ 
    var priceEnquiryModel = new PriceEnquiryModel(); 

    // Read parameter values from form. 
    int item = Convert.ToInt32(Request.Form["txtSearch"].ToString()); 
    int maxrow = Convert.ToInt32(Request.Form["txtmaxrow"].ToString()); 
    string priceType = !string.IsNullOrWhiteSpace(price.priceType) && price.priceType.ToUpper().Equals("STA") ? "N" : "Y"; 

    // Get the price information 
    var operationResult = priceBal.SearchPriceEnquiry(0, item, price.price_scheme, priceType, maxrow);    
    var priceEnquiryDomList = (List<PriceEnquiryDom>)operationResult[0].Result; 

    // Check if we have something 
    if (priceEnquiryDomList != null && priceEnquiryDomList.Count > 0) 
    { 
     // Parse the model. 
     priceEnquiryModel = helper.ConvertDomToModel(priceEnquiryDomList[0]); 
     // Prepare the list. 
     priceEnquiryModel.PriceEnquiryModelList = new List<PriceEnquiryModel>(); 
     foreach (var priceEnquiryDom in priceEnquiryDomList) 
     { 
      var priceEnquiryModelListItem = helper.ConvertDomToModel(priceEnquiryDom); 
      priceEnquiryModel.PriceEnquiryModelList.Add(priceEnquiryModelListItem); 
     } 
     Session["mainModel"] = priceEnquiryModel; 
    } 

    // Prepare product drop down list items if searched by product desc 
    if (TempData.Count > 0 && TempData["Products"] != null) 
    { 
     var products = TempData["Products"] as List<ProductSearchByDescModel>; 
     ViewBag.Products = products; 
    } 
    return View("Index", priceEnquiryModel); 
} 

這是在視圖模型(在調試) -

enter image description here

這是怎麼了渲染視圖上的模型 -

enter image description here

這是網頁運行後 -

enter image description here

有誰有任何想法到底是怎麼回事 ?我在多個頁面上完成了相同的操作,並且按預期運行。

在此先感謝。 Rohit

+0

的屬性設置新值之前調用ModelState.Clear()你會告訴我們的行動?當你傳遞模型動作來查看時,可能會發生一些問題。 –

+0

是否有任何JavaScript與這些值混淆? – beautifulcoder

+0

@beautifulcoder,不存在這樣的js .. – Rohit

回答

2

問題是您的方法有參數PriceEnquiryModel price但您返回的新實例PriceEnquiryModel(名爲priceEnquiryModel)。模型綁定的過程包括綁定您的模型並將其值添加到ModelState(以及任何驗證錯誤)。

當您返回視圖時,html幫助器方法使用ModelState(不是模型值)的值,因此試圖更改值(我認爲是priceEnquiryModel = helper.ConvertDomToModel(priceEnquiryDomList[0]);正在執行的操作)會被幫助器忽略。

對於爲什麼這是默認的行爲說明,請參閱的this answer

一種選擇,第二部分用於PriceEnquiryModel