2015-06-16 142 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