如何直接从Jquery访问.net MVC ViewData

sou*_*oul 4 c# asp.net-mvc jquery

我将viewdata传递到我的aspx页面,如下所示:

//Controller
List<user> userList = Data.GetAllUsersForCompany(companyId);
List<SelectListItem> dropDownList = FormatUserList(userList);
ViewData["UserList"] = userList;
ViewData["FormattedUserList"] = dropDownList;
return View();
Run Code Online (Sandbox Code Playgroud)

我正在使用用户名填充下拉列表,我想与Jquery绑定,以便当用户更改下拉列表时,这会依次更新当前所选用户的输入字段.

ASPX页面:

<p>
  <%= Html.DropDownList("userSelected", (List<SelectListItem>)ViewData["FormattedUserList"] )%><br /><br />

  <%= Html.TextBox("userFName")%><br />
  <%= Html.TextBox("userLName")%><br />    
  <%= Html.TextBox("userEmail")%>
</p>
Run Code Online (Sandbox Code Playgroud)

我连接Jquery以检测有效的下拉更改,但是如何使用数据操作输入框?

<script type="text/javascript">
  $(document).ready(function() {
    $("#userSelected").change(function() {
      var pkUser = $("#userSelected").val();
      alert("Current UserID is " + pkUser); //works up to here just fine
      $("#userFName).val() = ViewData["UserList"].Select(x => x.pkUser == valueOfDropDown).fName; ???
      .
      .
      .
    });
  });
</script>
Run Code Online (Sandbox Code Playgroud)

我做错了吗?你能指出这种情况的最佳实践吗?如果我能摆脱那些理想的回发.

灵魂(MVC新手)

小智 6

看起来你正在混合你的javascript和c#,记住javascript只执行客户端,而c#只执行服务器端.话虽这么说,如果你想让你的javascript在客户端使用的一些viewdata,你需要在javascript可以获得它的页面中对其进行编码.我能想到的最简单的方法是使用JavaScriptSerializer并将值嵌入到您的javascript中,类似于:

<%
  var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
%>

<script type="text/javascript">
  var users = <%= serializer.Serialize(ViewData["UserList"]) %>;

  //Use the users variable now with a copy of the view data.
</script>
Run Code Online (Sandbox Code Playgroud)