给定以下类和控制器操作方法:
public School { public Int32 ID { get; set; } publig String Name { get; set; } public Address Address { get; set; } } public class Address { public string Street1 { get; set; } public string City { get; set; } public String ZipCode { get; set; } public String State { get; set; } public String Country { get; set; } } [Authorize(Roles = "SchoolEditor")] [AcceptVerbs(HttpVerbs.Post)] public SchoolResponse Edit(Int32 id, FormCollection form) { School school = GetSchoolFromRepository(id); UpdateModel(school, form); return new SchoolResponse() { School = school }; }
以下形式:
我能够更新学校实例和学校的地址成员.这太好了!谢谢ASP.NET MVC团队!
但是,如何使用jQuery选择下拉列表以便我可以预先填充它?我意识到我可以做这个服务器端,但页面上会有其他影响列表的动态元素.
以下是我到目前为止,它不起作用,因为选择器似乎不匹配ID:
$(function() { $.getJSON("/Location/GetCountryList", null, function(data) { $("#Address.Country").fillSelect(data); }); $("#Address.Country").change(function() { $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) { $("#Address.State").fillSelect(data); }); }); });
bdukes.. 287
来自Google网上论坛:
在每个特殊字符前使用两个反斜杠.
jQuery选择器中的反斜杠会转义下一个字符.但是你需要其中两个,因为反斜杠也是JavaScript字符串的转义字符.第一个反斜杠转义第二个,在你的字符串中给你一个实际的反斜杠 - 然后转义为jQuery的下一个字符.
所以,我猜你在看
$(function() { $.getJSON("/Location/GetCountryList", null, function(data) { $("#Address\\.Country").fillSelect(data); }); $("#Address\\.Country").change(function() { $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) { $("#Address\\.State").fillSelect(data); }); }); });
另请查看如何通过包含CSS表示法中使用的字符的ID选择元素?在jQuery FAQ上.
来自Google网上论坛:
在每个特殊字符前使用两个反斜杠.
jQuery选择器中的反斜杠会转义下一个字符.但是你需要其中两个,因为反斜杠也是JavaScript字符串的转义字符.第一个反斜杠转义第二个,在你的字符串中给你一个实际的反斜杠 - 然后转义为jQuery的下一个字符.
所以,我猜你在看
$(function() { $.getJSON("/Location/GetCountryList", null, function(data) { $("#Address\\.Country").fillSelect(data); }); $("#Address\\.Country").change(function() { $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) { $("#Address\\.State").fillSelect(data); }); }); });
另请查看如何通过包含CSS表示法中使用的字符的ID选择元素?在jQuery FAQ上.
如果id包含空格,则不能使用jQuery id选择器.使用属性选择器:
$('[id=foo bar]').show();
如果可能,请指定元素类型:
$('div[id=foo bar]').show();
逃离Jquery:
function escapeSelector(s){ return s.replace( /(:|\.|\[|\])/g, "\\$1" ); }
用法示例:
e.find('option[value='+escapeSelector(val)+']')
更多信息在这里.
刚刚发布的ASP.NET MVC的Release Candidate解决了这个问题,它现在用ID属性的下划线替换了点.
<%= Html.TextBox("Person.FirstName") %>
渲染到
有关更多信息,请查看发行说明,从第14页开始.