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

时间:2009-10-20 14:22:02

标签: c# jquery asp.net-mvc

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

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

我正在使用用户名填充下拉列表,我希望将其与Jquery绑定,以便当用户更改下拉列表时,依次使用当前所选用户更新输入字段。

ASPX页面:

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

  <%= Html.TextBox("userFName")%><br />
  <%= Html.TextBox("userLName")%><br />    
  <%= Html.TextBox("userEmail")%>
</p>

我连接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>

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

灵魂(MVC新手)

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

在大多数情况下,最好使用静态javascript文件。这不是普遍的情况,但通常很难管理在运行时一起解析的代码。因此,您可以尝试在脚本标记中编写服>

您应该能够输出隐藏的表单元素,其中包含您稍后要使用的任何数据的值。

说出你的输出是:

<input type="hidden" id="fname_store" name="fname" value="soul" />

如果您发现此方法杂乱,这也可能是在内联脚本中设置的单个变量:

<script type="text/javascript">
   var data = <% serialized_data_from_the_server_side %>;
</script>

那么你的破线就是这样的:

$('#userFName').val($('#fname_store').val());

请注意,您在选择器末尾的代码中缺少引号,并且还注意到jQuery val()函数是通过向其传递值而不是将其设置为值来设置的。

最好的运气!

答案 2 :(得分:0)

您可以随时更新您的操作。

List<user> userList = Data.GetAllUsersForCompany(companyId);
List<SelectListItem> dropDownList = FormatUserList(userList);

return Json(new { UserList = userList, FomattedUserList = dropDownList} );