Web:文本框值属性与文本框中的值不同

时间:2011-05-14 16:43:58

标签: asp.net-mvc-3 textbox

我正在使用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 :(得分:0)

当您尝试修改ModelState中包含的POST操作中的值并呈现相同视图时,这是一个常见问题。您需要在更改模型状态之前从模型状态中删除该值,否则HTML帮助程序(例如HiddenFor)将在绑定时使用POSTed值:

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

通过调试验证ModelState包含一个名为UserInfo.iUserID的值。


更新:

似乎使用了错误的语法来检索值:

('#UserInfo_iUserID').val

而不是:

$('#UserInfo_iUserID').val()

答案 1 :(得分:0)

我有与Darrin描述的相同的问题 见Updating value provider prior to TryUpdateModel 帮助者表现出这种行为,因为他们假设你在帖子后重新显示数据应该有一个验证失败,否则你将重定向到一个get动作作为MVC PRG(重定向后获取)模式的一部分

我认为你的问题不同,如下所述。