2015-06-16 4 views
1

Что-то странное происходит, и я не могу понять, почему .. вот сценарий -свойства модели MVC возвращающие значение по умолчанию

У меня есть модель с несколькими свойствами, когда я заполнения модели свойства в модели действительно есть ценности set (проверяется путем размещения контрольных точек). Он также отображается в представлении, но он не отображается в текстовом поле. Он показывает значение по умолчанию (угадывание, видя текстовое поле элемента на странице, так как оно равно 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; } 
} 

Это контроллер; s код -

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); 
} 

Это модель на View (при отладке) -

enter image description here

Это, как я рендеринга модель на представлении -

enter image description here

Это страница после запуска -

enter image description here

Кто-нибудь имеет какие-либо идеи что происходит ? Я делал то же самое на нескольких страницах, и все выполнялось так, как ожидалось.

Спасибо заранее. Рохит

+0

ли вы показать нам действие? Возможно, какая-то проблема возникает, когда вы передаете действие модели для просмотра. –

+0

Есть ли какой-либо JavaScript-интерфейс с этими значениями? – beautifulcoder

+0

@beautifulcoder, no нет таких js .. – Rohit

ответ

2

Вопрос заключается в том, что ваш метод имеет параметр PriceEnquiryModel price, но тогда вы вернуть новый экземпляр PriceEnquiryModel (названный priceEnquiryModel). Процесс привязки модели включает привязку вашей модели и добавление ее значений в ModelState (наряду с любыми ошибками проверки).

Когда вы возвращаете представление, методы html helper используют значения из ModelState (а не значения моделей), поэтому попытка изменить значения (что я предполагаю, это то, что делает priceEnquiryModel = helper.ConvertDomToModel(priceEnquiryDomList[0]);) игнорируется помощниками.

Для объяснения того, почему это поведение по умолчанию, см второй части this answer

Один из вариантов для вызова ModelState.Clear() перед установкой новых значений свойств PriceEnquiryModel

Смежные вопросы