我将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新手)
答案 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} );