2010-08-23 2 views
4

Допустим, у нас есть класс с свойством PetsName. Если он оставлен пустым на экране, я хочу обновить поставщика значений, поэтому, если пользователь не вводит имя любимца, мы вынуждаем «неназванный». Это не фактический сценарий .. это, конечно, образец, поэтому ответы, такие как «просто заданные значения по умолчанию на веб-странице и т. Д.», Не будут соответствовать этому сценарию:)Обновление поставщика стоимости до TryUpdateModel

Основная проблема заключается в том, что мы хотим обновить значения, поэтому, когда вы обновляете модель, она будет использовать все, что вы переопределили. Я предполагаю, что одна идея - удалить значение и добавить его. Когда я проверяю ModelState, он имеет обновленное значение, однако, когда я вызываю TryUpdateModel, значение не обновляется. Его возможное то, что я делаю ниже, действительно правильно, и здесь есть еще одна проблема, но я решил, что сначала попробую. Благодаря!

//Sample case: 

    [HttpPost] 
    public ActionResult Edit(PetOwner petOwner) 
    { 

    //If pets name is not set, force to "Unknown" 
    if(petOwner.PetsName=="") 
    { 
    //Tried this too ModelState.Remove("PetsName"); 
    //ModelState.Add("PetsName", new ModelState()); 
    ModelState["PetsName"].Value = new ValueProviderResult("Unnamed", "Unnamed", CultureInfo.CurrentCulture); 
    } 

    //Get the record/relationships from DB to merge with ModelState 
    PetOwner petOwnerToSave = from o in ctx.PetOwners where o.PetOwnerId == petOwner.PetOwnerId select o; 

    TryUpdateModel(petOwnerToSave); 

    //Save petOwnerToSave 
    } 

ответ

4

Реальная проблема за кулисами в том, что Html.HiddenFor не показывал правильное значение, даже если TryUpdateModel было обновляющий значение в модели, чтобы дать представление.

Проблема заключается в том, что помощники Html предполагают, что если вы просматриваете представление после сообщения, должна быть ошибка (иначе вы бы перенаправили обратно в представление с помощью метода GET - следовательно, проблема с возвратом сообщения)

Это подробно описано в: http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

+0

И "в деталях" вы имеете в виду в обход Post-Redirect-Get предположение помощникам с помощью 'ModelState.Clear();'. Большое вам спасибо за эту ссылку, у меня действительно возникли проблемы с выяснением, почему я получал ошибки после сообщения ajax. Ваш другой совет (здесь: http://stackoverflow.com/a/5906396/1026459) действительно хорошо сочетается с этим тем, что он показывает, как правильно получить разметку проверки в частичных представлениях с помощью '@ {if (ViewContext.FormContext == null) {ViewContext.FormContext = new FormContext();} '. Благодаря! :) –

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