2010-11-16 5 views
1

Tout d'abord, suis-je le seul développeur de la planète qui tente d'utiliser MVC avec VB? J'ai cherché des tonnes de forums et lu de nombreux messages et tout le monde qui pose une question donne un exemple en C#. Quoi qu'il en soit, maintenant que je n'ai plus rien à faire, j'ai une simple table de base de données (User) avec quelques colonnes (UserId, Username, FirstName, LastName). J'utilise le framework d'entité et sur ma vue d'édition, je change une valeur (Nom d'utilisateur) et clique sur Enregistrer. Dans mon message http Edit, je lui dis de revenir à l'index et la valeur n'a pas été enregistrée. Bien que, dans mon constructeur pour le poste http, je retourne l'objet et il montre la nouvelle valeur ... mais cette valeur ne le rend pas à la db ... aucune aide?MVC2 Entity Framework - Mise à jour du modèle

Mon contrôleur:

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 

Mon point de vue:

<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> 

Répondre

1

Ok, donc, aparently Je suis le seul développeur VB utilisant MVC. Quoi qu'il en soit, j'ai trouvé la réponse. Il était dans l'un des tutoriels pour débutant pour MVC sur le site ASP.Net (Found Here). La réponse a été de modifier ma fonction d'édition (HttpPost) de sorte qu'elle utilise les valeurs de formulaire qui ont été affichées:

<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 
Questions connexes