我有一个用ASP.NET MVC编写的网站,我有一个参数设置到相关页面,指定前一页是什么。这样做的原因是,当用户单击特定页面中的图像时,加载的页面将使用javascript(特别是jQuery)自动检查相应的复选框。
以下是获取和设置参数的代码:
<script type="text/C#" runat="server">
protected string Referrer = string.Empty;
protected override void OnLoad(EventArgs e)
{
try
{
Referrer = Request.UrlReferrer.Segments[2].ToLower();
}
catch (System.Exception)
{
Referrer = string.Empty;
}
base.OnLoad(e);
}
</script>
接下来,这是复选框的集合:
<div id="interestSelect1" class="interestPad">
<%= Html.CheckBoxFor(model => model.Interests[0])%>
<label for="Interests_0_">Insulation</label>
<%= Html.CheckBoxFor(model => model.Interests[1])%>
<label for="Interests_1_">Windows</label>
<%= Html.CheckBoxFor(model => model.Interests[2])%>
<label for="Interests_2_">Siding</label>
<%= Html.CheckBoxFor(model => model.Interests[3])%>
<label for="Interests_3_">Roofing</label>
</div>
<div class="clear">
</div>
<div id="interestSelect2" class="interestPad">
<%= Html.CheckBoxFor(model => model.Interests[4])%>
<label for="Interests_4_">Gutters/Protection</label>
<%= Html.CheckBoxFor(model => model.Interests[5])%>
<label for="Interests_5_">Patio Doors</label>
</div>
在浏览器中呈现时,每个复选框的外观如下:
<input id="Interests_0_" name="Interests[0]" type="checkbox" value="true" />
<input name="Interests[0]" type="hidden" value="false" />
<label for="Interests_0_">Insulation</label>
以下是我正在使用的javascript,它不起作用:
<script type="text/javascript">
var ref = '<%= Referrer %>';
$(document).ready(function () {
switch (ref) {
case "insulation":
$('Interests_0_').attr('checked', 'checked');
break;
case "windows":
$('Interests_1_').attr('checked', 'checked');
break;
case "siding":
$('Interests_2_').attr('checked', 'checked');
break;
case "roofing":
$('Interests_3_').attr('checked', 'checked');
break;
case "gutters":
$('Interests_4_').attr('checked', 'checked');
break;
case "patiodoors":
$('Interests_5_').attr('checked', 'checked');
break;
default:
// do nothing, not valid ref
}
});
</script>
我显然做了一件完全错误的事情,有人能指出我正确的方向吗?
谢谢!
编辑:看起来是在我的JS块导致不检查框之前调用的MasterPage上的另一个JS文件。主要问题是忘记了#
标识符。
答案 0 :(得分:1)
#id
selectors需要一个#
前缀,如下所示:
$('#Interests_0_').attr('checked', 'checked');
没有#
,它是element selector,正在寻找<Interests_0_>
元素。
你可以用一个对象来减少它,比如:
var ref = '<%= Referrer %>';
var map = {"insultation":"#Interests_0_",
"windows":"#Interests_1_",
"siding":"#Interests_2_",
"roofing":"#Interests_3_",
"gutters":"#Interests_4_",
"patiodoors":"#Interests_5_"};
$(function () {
var id = map[ref];
if(id) $(id).attr('checked', true);
});
答案 1 :(得分:1)
这不是MVC,而是经典的ASP.NET网络表单。在MVC中没有代码隐藏的概念,在正常情况下,您不使用OnLoad之类的事件,并且通常不使用runat = server脚本块。请查看nerd dinner example以获取MVC的概述。