Web: атрибут значения текстового поля не совпадает со значением в текстовом поле - PullRequest
1 голос
/ 14 мая 2011

Я использую Visual Studio 2010, обновленную до последней версии, и инфраструктуру MVC3, обновленную до последней версии. Я также использую jquery 1.5.1, но эта проблема не связана с jquery.

У меня есть следующая главная страница:

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css"  type="text/css" />
<link href="@Url.Content("~/Content/UserMaintainance.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/UserMaintainance.js")" type="text/javascript"></script>

@model TourSystem2.Models.UserMaintainanceViewModel
@{
    ViewBag.Title = "UserMaintainance";
}

@Model.Debug

<h2>User Maintainance</h2>
<div id = "EditUser"></div>
<table>
<tr id="1">
    <td><button type="button"  class = "deleteButton"></button></td>

    <td><button type="button"  class = "editButton"></button></td>
    <td>John                          </td>
    <td>john                          </td>
    <td>A</td>
    <td>1234                </td>
    <td></td>

    //snipped some unrelated form generation of user information showing
    <tr id = "0">
    <td colspan = "7"><button type = "button" id = "addButton">Add New User</button></td>
    </tr>
</table>

В сценарии java для этой формы я делаю следующее для addButton:

$(function () {
$(':button.editButton, :button#addButton').click(function () {
    var myData = $(this).parent().parent().attr("id");
    $.post("/Admin/EditUser", { UserID: myData },
        function (data) {
            $('#EditUser').html(data);
            $('#EditUser').dialog({
                modal: true,
                width: 400,
                resizable: false,
                buttons: {
                    "Save": function () {
                        $(this).dialog("close");
                        },
                    "Cancel": function () {
                        $(this).dialog("close");
                    }
                }
            });


        });  //end post
});

Часть страницы / Admin / EditUser выглядит следующим образом:

@model TourSystem2.Models.UserEditViewModel
<link href="/Content/UserEdit.css" rel="stylesheet" type="text/css" />     
@Html.HiddenFor(Model => Model.UserInfo.iUserID)      
<table id="useredit">
    <tr>
        <td>@Html.LabelFor(Model => Model.UserInfo.cLoginName, "Login Name")</td>
        <td>@Html.TextBoxFor(Model => Model.UserInfo.cLoginName)</td>
    </tr>
    //Snip more fields
</table>

Код моего контроллера для EditUser выглядит так:

    public ActionResult EditUser(int UserID)
    {
        UserEditViewModel myUser = new UserEditViewModel();

        if (UserID == 0)
        {
            myUser.UserInfo.iUserID = 0;
            return PartialView("UserEdit", myUser);
        }
        else if (myUser.Load(UserID))
        {
            return PartialView("UserEdit", myUser);
        }
        else
        {
            return Json("Broken: " + myUser.Debug);
        }
    }

Мое намерение состоит в том, чтобы после нажатия кнопки сохранить я сделал еще одну запись AJAX для передачи информации обратно на сервер.

Пока что все работает довольно хорошо, за исключением того, что атрибут value текстового поля не изменяется, даже если текст в поле изменился. Если я щелкну по редактированию, файлы данных будут корректно выведены на частичную страницу editUser ... но любые изменения не будут отражены в значении.

Используя firebug, я могу визуально увидеть, что значение не изменяется для любого текстового поля, которое у меня есть на экране. Во время записи «сохранить пользователя» возвращается только исходное значение, а не измененное значение.

Я что-то упустил очень простой?

* РЕДАКТИРОВАТЬ 1 *** Я пытаюсь сделать следующее в моем событии SaveButton:

                    "Save": function () {
                        var myUser =
                            {
                                iUserID: ('#UserInfo_iUserID').val,
                                cLoginName: ('#UserInfo_cLoginName').val,
                            };
                            $.ajax({
                                type: "POST",
                                url: "/admin/SaveUser",
                                data: myUser,
                                success: function (bNum) {
                                    alert("returned" + bNum);
                                }
                            });

Я получаю старые результаты для cLoginName: ('#UserInfo_cLoginName'). Val

Это происходит перед вторым POST.

Ответы [ 2 ]

0 голосов
/ 14 мая 2011

У меня была та же проблема, что и у Даррина, описанного ниже. См. Обновление значения поставщика до TryUpdateModel Помощники демонстрируют это поведение, потому что они предполагают, что если вы повторно отображаете данные после публикации, должна быть ошибка проверки, в противном случае вы бы перенаправили на действие get как часть шаблона MVC PRG (получение после перенаправления)

Я полагаю, что ваша проблема отличается, как было указано ниже.

0 голосов
/ 14 мая 2011

Это распространенная ошибка, когда вы пытаетесь изменить значения в действии POST, которые содержатся в ModelState, и отображать то же представление. Вам нужно будет удалить значение из состояния модели перед его изменением, иначе HTML-помощники (например, HiddenFor) будут использовать значение POSTed при связывании:

ModelState.Remove("UserInfo.iUserID");
myUser.UserInfo.iUserID = 0;
return PartialView("UserEdit", myUser);

Проверьте путем отладки, что ModelState содержит значение с именем UserInfo.iUserID.


UPDATE:

Похоже, неправильный синтаксис используется для получения значений:

('#UserInfo_iUserID').val

вместо:

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