2011-05-14 23 views
1

我正在使用Visual Studio 2010更新到最新版本,並將MVC3框架更新爲最新版本。我也使用jquery 1.5.1,但這個問題似乎並沒有jQuery相關。Web:文本框的值屬性與文本框中的值不一樣

我主要有如下頁面:

<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腳本,我做的對Add按鈕如下:

$(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 
}); 

部分頁/管理/ 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帖子將信息傳遞迴服務器。

到目前爲止,除了文本框的值屬性不會更改,即使框中的文本已更改,所有內容都可以正常工作。如果點擊編輯,數據將在editUser局部頁面上正確輸出......但是任何更改都不會反映在值中。

使用螢火蟲,我可以直觀地看到,對於我在屏幕上的任何文本框,該值不會改變。在「保存用戶」文章中,只返回原始值,而不是修改後的值。

我錯過了一些非常基本的東西嗎?

*編輯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之前。

+0

添加編輯1 ...仍然學習系統。 – 2011-05-14 16:58:52

回答

0

當您嘗試修改ModelState中包含的POST操作中的值並呈現相同的視圖時,這是常見的問題。結合時,您將需要改變它或HTML輔助(如HiddenFor)將使用張貼的值之前刪除從模型狀態值:

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

驗證由ModelState中含有一種叫UserInfo.iUserID值調試。


UPDATE:

看來,錯誤的語法來檢索值:的

('#UserInfo_iUserID').val 

代替:

$('#UserInfo_iUserID').val() 
+0

正如在另一個回覆中提到的,我的問題是我無法獲得用戶使用cLoginName輸入到文本框中的值:('#UserInfo_cLoginName')。val, 因此,它甚至沒有正確地訪問控制器價值開始。 – 2011-05-14 18:05:44

+0

@John Stone,'val'是一種功能而非屬性。你在開始時也會錯過'$'。所以正確的語法應該是這樣的:'$('#UserInfo_iUserID').val()'而不是'('#UserInfo_cLoginName').val'。 – 2011-05-14 18:06:59

+0

謝謝你......這是問題所在。 *尷尬*少量睡眠或咖啡編碼是個壞消息。 – 2011-05-14 18:43:57

0

我有同樣的問題,因爲達林如下所述 請參閱Updating value provider prior to TryUpdateModel 幫手因爲他們假設如果你在post之後重新顯示數據,那麼應該有一個驗證失敗,否則你將被重定向到一個get action,作爲MVC PRG的一部分(post重定向get)模式

我相信你的問題儘管與以下指出的不同。

+0

問題是,當我使用cLoginName:('#UserInfo_cLoginName')。val在發佈之前,我沒有得到用戶輸入的正確值。因此,我甚至無法發佈正確的價值。我想要做的事情在它進入控制器之前就完全失敗了。哪些問題我如何獲得用戶輸入,而不是過時的價值? – 2011-05-14 17:54:51