Если изменения значения в Модели после сообщения, Форма все еще отображает старое значение

Что относительно IncrediBuild? Это - хорошая распределенная система сборки с интеграцией Visual Studio.

7
задан abatishchev 24 February 2014 в 05:21
поделиться

2 ответа

Вот код из источника MVC для текстового поля:

     string attemptedValue = (string)htmlHelper.GetModelStateValue(name, typeof(string));
                tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(name) : valueParameter**), isExplicitValue);
                break;

И код для GetModelStateValue ( )

    internal object GetModelStateValue(string key, Type destinationType) {
        ModelState modelState;
        if (ViewData.ModelState.TryGetValue(key, out modelState)) {
            if (modelState.Value != null) {
                return modelState.Value.ConvertTo(destinationType, null /* culture */);
            }
        }
        return null;
    }

Итак, что происходит: Html "Helper" ищет значение текстового поля, сопоставляя имя в вашем ViewData.ModalState, если оно находится в словаре ModelState, он полностью игнорирует значение, которое вы при условии.

Итак, все, что if (value> 0) {ValueA = 0; } не имеет значения, потому что он будет использовать опубликованные значения в ModelState, если имена совпадают.

Способ, которым я ' Мы исправили это, чтобы убрать ModalState до того, как представление отобразит определенные значения, с которыми я хочу возиться в своих моделях представления. Вот код, который я использовал:

    public static void SanitizeWildcards( Controller controller, params string[] filterStrings )
    {
        foreach( var filterString in filterStrings )
        {
            var modelState = controller.ModelState;

            ModelState modelStateValue;
            if( modelState.TryGetValue(filterString,out 
                    controller.ModelState.SetModelValue(filterString, new ValueProviderResult("","", null));
        }
    }
7
ответ дан 6 December 2019 в 19:37
поделиться

спасибо, jfar .. это код vb:

Sub CleanForm(ByVal ParamArray Fields() As String)
    Dim modelStateValue As ModelState = Nothing
    For Each Field In Fields
        If ModelState.TryGetValue(Field, modelStateValue) Then
            ModelState.SetModelValue(Field, New ValueProviderResult(Nothing, Nothing, Nothing))
        End If
    Next
End Sub
0
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: