ASP.NET MVC Форма редактирования не сохраняет данные - PullRequest
0 голосов
/ 12 декабря 2011

В моем редактируемом представлении информация не отображается в форме в текстовых полях.Вот как выглядят мои функции редактирования в контроллере:

[HttpGet]
[Authorize(Roles = "Admin")]
public ActionResult Edit(int id)
{
    var logic = new ContactBUS();
    var user = logic.GetContact(id);
    var mUser = Membership.GetUser(user.Username);
    bool memUserExists = doesUserExist(mUser);

    if (memUserExists)
    {
        var model = new RoleListViewModel
        {
            AllRoles = Roles.GetAllRoles().ToList()
        };

        return View(model);
    }

    return View(logic.GetContact(id));
}

[HttpPost]
[Authorize(Roles = "Admin")]
public ActionResult Edit(Contact contact)
{
    var logic = new ContactBUS();
    if (ModelState.IsValid)
    {
        logic.EditContact(contact);
        return RedirectToAction("List");
    }
    else
        return View(contact);
    }
}

Есть идеи, почему это происходит?Любая помощь будет принята с благодарностью.

Edit.cshtml

@model ContactWeb.Models.RoleListViewModel

<h2>Edit</h2>

<div style="float:left;width:350px;">
@{Html.RenderPartial("Form", new ContactWebLibrary.Contact());}
</div>

и Form.cshtml

@model ContactWebLibrary.Contact

@using (Html.BeginForm()) {
    <input type="hidden" value="@Model.Id" />
    <fieldset id="ContactEditor">
        <legend>Fields</legend>

        <div>
        @Html.LabelFor(c=>c.FirstName, "First Name")
        @Html.TextBoxFor(c=>c.FirstName)
        @Html.ValidationMessageFor(c=>c.FirstName)
        </div>

        <div>
        @Html.LabelFor(c=>c.LastName, "Last Name")
        @Html.TextBoxFor(c=>c.LastName)
        @Html.ValidationMessageFor(c=>c.LastName)
        </div>

        <div>
        @Html.LabelFor(c=>c.Email)
        @Html.TextBoxFor(c=>c.Email)
        @Html.ValidationMessageFor(c=>c.Email)
        </div>

        <div>
        @Html.LabelFor(c=>c.Username)
        @Html.TextBoxFor(c=>c.Username)
        @Html.ValidationMessageFor(c=>c.Username)
        </div>

        <p style="clear:both">
            <input type="submit" value="@(Model.Id == 0 ? "Create" : "Edit" )" />
        </p>
    </fieldset>

}

1 Ответ

0 голосов
/ 12 декабря 2011

Если memUserExists имеет значение true, тогда новый RolesListViewModel передается в представление редактирования.Это, в свою очередь, передает совершенно новую модель Контакта частичному представлению каждый раз, когда отображается это частичное представление:

@{Html.RenderPartial("Form", new ContactWebLibrary.Contact());}

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

Возвращает ли logic.GetContact (id) RoleListViewModel?В противном случае, когда memUserExists имеет значение false, я не думаю, что следующая строка будет работать при возврате представления Edit:

return View(logic.GetContact(id));

А также, следующая строка в вашем [HttpPost]:

return View(contact);

Это передает объект Contact в представление, которое ожидает RoleListViewModel.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...