asp.net
  • model
  • formview
  • 2013-06-21 2 views 1 likes 
    1

    Я использую Framework 4.5 и решил воспользоваться некоторыми его улучшений .. Скажем, у меня есть следующий контроль внутри FormView:TryUpdateModel не обновляет ничего для FormView

    <asp:TextBox ID="EventNumberTextBox" runat="server" Text='<%# Item.Event_Num %>' /> 
    

    В моем UpdateMethod я делаю следующее:

    public void UpdateModelFromView(int? ID) 
    { 
        var modelView = new AlertMessageController().LoadById(ID); 
        var updateSuccess = TryUpdateModel(modelView); 
        if (updateSuccess) 
        { 
         new AlertMessageController().Save(modelView); 
         RedirectToViewPage(); 
        } 
    } 
    

    Проблема заключается в том, что, хотя коллекции формы действительно содержит все изменения, которые я сделал - в данном случае я задал Event_Num некоторое значение - изменения не отражается на видовой. Другими словами, любые изменения, которые я вношу в элементы управления FormView, игнорируются, и модель сохраняется как после загрузки ...

    +2

    Вы пытались использовать BindItem вместо Item на вашем TextBox, т. Е. BindItem.Event_Num? –

    +0

    Грэм, большое спасибо, я чувствую, что я почти там, но теперь у меня другая проблема. Дело в том, что я должен брать поля только из формы и игнорировать URL. Когда я использую TryUpdateModel только с одним параметром - он обновляет модель с параметрами URL и формы. Я попытался использовать второй параметр: new NameValueCollectionValueProvider (HttpContext.Current.Request.Form, Culture.GetBrowserOrDefaultCulture()) или новый FormValueProvider (Page.ModelBindingExecutionContext), но в этих случаях TryUpdateModel полностью игнорирует все измененные значения ... – Anik

    +0

    У меня есть попытался изменить параметры для UpdateMethod, чтобы принять полный объект: UpdateModelForView (элемент AlertMessageInfo). Теперь ModelState, кажется, содержит все ключи из формы, но ... его значения не применяются, когда я пытаюсь использовать TryUpdateModel (modelView, новый FormValueProvider (Page.ModelBindingExecutionContext)) – Anik

    ответ

    3

    Товар предназначен для односторонней передачи данных. Для двусторонней привязки данных вы должны использовать BindItem, т. Е. BindItem.Event_Num.

    +0

    Да, я понял. Я просто не могу понять, почему использование TryUpdateModel (modelView, FormValueProvider (Page.ModelBindingExecutionContext)) работает не так, как TryUpdateModel (modelView). На мой взгляд, он должен работать так же ... – Anik

    +0

    И еще один вопрос. Если мне нужно использовать UpdatePanel - как получить доступ к элементам? В этом случае они выходят за рамки видимости! – Anik

    +1

    FormValueProvider не используется веб-формами при связывании данных. FormValueProvider для MVC, где имена входов соответствуют именам свойств модели. –

    0

    Аник, я считаю, что имя поля формы должно соответствовать имени свойства.

    +0

    Я пробовал это, конечно. Не повезло :(Я также попытался использовать другую версию метода TryUpdateModel: TryUpdateModel (modelView, новый NameValueCollectionValueProvider (HttpContext.Current.Request.Form, Culture.GetBrowserOrDefaultCulture())) - тоже не повезло. – Anik

    +0

    Но подождите минуту: do вы имеете в виду NAMES? Итак, мне нужно добавить имя для каждого элемента управления формы в дополнение к ID? Я не могу попробовать это в данный момент, но мне любопытно .. – Anik

    +0

    Когда ASP.NET генерирует HTML для TextBox, он автоматически создает имя для него на основе идентификатора.Это имя должно соответствовать имени свойства.Если вы используете HtmlHelpers для генерации полей формы и ввода, он обрабатывает это для вас. –

    0

    К сожалению, их пример довольно узкий. Я загрузил его для анализа. Они не демонстрируют методы обновления FormView, только сетки, поэтому я понятия не имею об идентификаторах и NAMEs элементов управления FormView. Я думал, что связанных значений должно быть достаточно, чтобы установить соответствие фактическим свойствам для обновления (т. Е. Item.Event_Num). Есть еще одна странная вещь: когда я нажимаю на метод TryUpdateModel - он переносит меня в UserControl, но он не показывает описание этого метода! Но у меня установлен FrameWork 4.5, и моя документация взята из источника ONLINE ...

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

    • Нет связанных вопросов^_^