Почему эти флажки не проверяются из-за кода? - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть веб-сайт, написанный на 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 ]

1 голос
/ 09 ноября 2010

Это не MVC, а классические веб-формы ASP.NET. В MVC отсутствует концепция выделения кода, в обычных условиях вы не используете такие события, как OnLoad, и обычно не используете блоки сценариев runat = server. Взгляните на пример обеда для ботаников для обзора MVC.

1 голос
/ 09 ноября 2010

#id селекторы нужен префикс #, например:

$('#Interests_0_').attr('checked', 'checked');

Без # это селектор элемента , ищущий элемент <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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...