MVC2 Entity Framework - модель обновления - PullRequest
1 голос
/ 16 ноября 2010

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

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

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 Ответ

1 голос
/ 16 ноября 2010

Хорошо, так что, видимо, я единственный разработчик 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
...