2010-11-16 4 views
1

Прежде всего, я единственный разработчик на планете, который пытается использовать MVC с VB? Я искал множество форумов и читал много сообщений, и каждый, кто задает вопрос, дает пример в C#. Во всяком случае, теперь, когда у меня все получилось, у меня есть простая таблица базы данных (Пользователь) с некоторыми столбцами (UserId, Username, FirstName, LastName). Я использую структуру сущности и в своем представлении редактирования, я меняю значение (имя пользователя) и нажимаю «Сохранить». В моей статье «Редактировать http» я рассказываю об этом, чтобы вернуться к индексу, и значение не было сохранено. Хотя в моем конструкторе для сообщения http я возвращаю объект, и он показывает новое значение ... но это значение не делает его для db ... никакой помощи?MVC2 Entity Framework - Обновить модель

Мой контроллер:

Function Edit(ByVal ID As Guid) As ActionResult 
     'get the user 
     Dim usr = (From u In db.Users 
        Where u.UserId = ID 
        Select u).Single 

     Return View(usr) 
    End Function 

    <HttpPost()> _ 
    Function Edit(ByVal ID As Guid, ByVal usrInfo As User, ByVal formValues As FormCollection) As ActionResult 
     '   Dim usr As User = db.Users.Single(Function(u) u.UserId = ID) 

     If ModelState.IsValid Then 
      TryUpdateModel(usrInfo, "User") 

      Return RedirectToAction("Index") 
     Else 
      Return View(usrInfo) 
     End If 
    End Function 

Мое мнение:

<h2>Edit</h2> 

<%-- The following line works around an ASP.NET compiler warning --%> 
<%: ""%> 

<% Using Html.BeginForm() %> 
    <%: Html.ValidationSummary(True) %> 
    <fieldset> 
     <legend>Fields</legend> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.UserId) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.UserId) %> 
      <%: Html.ValidationMessageFor(Function(model) model.UserId) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.Username) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.Username) %> 
      <%: Html.ValidationMessageFor(Function(model) model.Username) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.FirstName) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.FirstName) %> 
      <%: Html.ValidationMessageFor(Function(model) model.FirstName) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.LastName) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.LastName) %> 
      <%: Html.ValidationMessageFor(Function(model) model.LastName) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.CreatedDate) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.CreatedDate, String.Format("{0:g}", Model.CreatedDate)) %> 
      <%: Html.ValidationMessageFor(Function(model) model.CreatedDate) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.CreatedBy) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.CreatedBy) %> 
      <%: Html.ValidationMessageFor(Function(model) model.CreatedBy) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(Function(model) model.LastLogin) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(Function(model) model.LastLogin, String.Format("{0:g}", Model.LastLogin)) %> 
      <%: Html.ValidationMessageFor(Function(model) model.LastLogin) %> 
     </div> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% End Using %> 

<div> 
    <%: Html.ActionLink("Back to List", "Index") %> 
</div> 

ответ

1

Хорошо, так, Aparently Я единственный разработчик VB с помощью MVC. Во всяком случае, я нашел ответ. Это было в одном из начинающих руководств для MVC на сайте ASP.Net (Found Here). Ответ состоял в том, чтобы изменить функцию «Редактировать» (HttpPost), чтобы она использовала зарегистрированные значения формы:

<HttpPost()> _ 
    Function Edit(ByVal id As Guid, ByVal collection As FormCollection) As ActionResult 
     Dim rest = (From r In db.Restaurants 
       Where r.RestaurantId = id 
       Select r).Single() 

     Try 

      TryUpdateModel(rest, collection.ToValueProvider()) 

      db.SaveChanges() 

      Return RedirectToAction("Index") 
     Catch 
      Return View(rest) 
     End Try 
    End Function 
Смежные вопросы