为什么不从代码隐藏中检查这些复选框?

时间:2010-11-09 19:36:59

标签: jquery asp.net-mvc checkbox

我有一个用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文件。主要问题是忘记了#标识符。

2 个答案:

答案 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的概述。