MVC3 C # Entity Framework заполняет текстовое поле исходя из выбора списка

Пара ссылок, которые я пробовал, привел меня к моему коду ... который не работает: D

Get The Drop on DropDownLists and Creating Cascading Dropdown Lists

Я пытаюсь разрешить пользователю выбирать номер детали (itemnmbr) из выпадающего списка и после их выбора, обновите страницу с текстовым полем описания детали (itemdesc) с правильным значением. Ниже находится ближайший я получил.

ПРОСМОТР КОДА:

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>


<script type="text/javascript">
    $(document).ready(function() {
        $("#ITEMNMBR").change(function() {
            $.get("/PartsLabor/GetPartDesc", $(this).val(), function (data) {
                $("#ITEMDESC").val(data);
            });
        });
    });
</script>

@using (Html.BeginForm()) 
{
    @Html.ValidationSummary(true)
    
Add part to call: @ViewBag.CALLNBR @Html.LabelFor(model => model.ITEMNMBR, "Item Number") @Html.DropDownList("ITEMNMBR", (SelectList) ViewBag.Items, "Please Select a Part #") @Html.ValidationMessageFor(model => model.ITEMNMBR)
@Html.LabelFor(model => model.ITEMDESC, "Description") @Html.EditorFor(model => model.ITEMDESC) @Html.ValidationMessageFor(model => model.ITEMDESC)
<input type="submit" class="submit" value="Add Part" />
}

Код контроллера:

    [Authorize]
    public ActionResult PCreate(string call)
    {

        var q = db.IV00101.Select(i => new { i.ITEMNMBR});
        ViewBag.Items = new SelectList(q.AsEnumerable(), "ITEMNMBR", "ITEMNMBR");
        ViewBag.CALLNBR = call;
        return View();
    }

    public ActionResult GetPartDesc(char itemnmbr)
    {
        var iv101 = db.IV00101.FirstOrDefault(i => i.ITEMNMBR.Contains(itemnmbr));
        string desc = iv101.ITEMDESC;
        return Content(desc);
    }

Firefox Error Console возвращает:

Отметка времени: 12/28/2012 2:40:29 PM Предупреждение: использование указанных атрибутов   атрибут устарел. Он всегда возвращает true. Исходный файл:    http://ajax.aspnetcdn.com/ajax/jquery/jquery -1.6.4.min.js Линия: 2

     

Временная метка: 12/28/2012 2:40:34 PM Внимание! Использование getAttributeNode ()   осуждается. Вместо этого используйте getAttribute (). Исходный файл:   ~/Scripts/jquery-1.6.4.min.js Линия: 3

Веб-консоль Firefox возвращает эти две, а также нижеследующую (которая граничит между двумя выше):

URL-адрес запроса: ~/PartsLabor/GetPartDesc? 002N02337   Метод запроса: GET   Код состояния: ошибка внутреннего сервера HTTP/1.1 500

2
nl ja de
Можете ли вы уточнить, что именно не работает? Получаете ли вы какие-либо ошибки в окне вывода консоли консольного браузера, например?
добавлено автор Nope, источник
если вы положите точку останова в GetPartDesc, это попадет? Есть ли значение itemnmbr, которое вы ожидали?
добавлено автор Ben Tidman, источник
Вы получаете ошибки javascript? 404? Можете ли вы опубликовать их?
добавлено автор Ben Tidman, источник
Вы попробовали изменение, которое я разместил ниже?
добавлено автор Ben Tidman, источник
@BenTidman Ben, Единственные ошибки, которые я видел (это не связанные с CSS), - это те, что указаны в комментарии к Ф. Валю выше. Я добавил их к нижней части O.P, чтобы они были структурированы лучше.
добавлено автор Phillip O., источник
@BenTidman, которого я сделал ... Кажется, ничего не изменило, насколько я вижу результаты и ошибки.
добавлено автор Phillip O., источник
@ FrançoisWahl Использование Firefox. Когда я смотрю в «Веб-консоли» и выбираю часть, я получаю: [13: 58: 36.938] Использование атрибута «атрибут» устарело. Он всегда возвращает true. @ ajax.aspnetcdn.com/ajax/jquery/jquery -1.6.4.min.js: 2 [13: 58: 37.007] GET localhost: 10659/PartsLabor/& hellip; [HTTP/1.1 500 Internal Server Error 64ms] - [13:58 : 48.385] Использование getAttributeNode() устарело. Вместо этого используйте getAttribute (). @ localhost: 10659/Scripts/jquery-1.6.4.min.js : 3
добавлено автор Phillip O., источник
@BenTidman Вставить точку останова на контроллере в GetPartDesc. Не ломается, когда я выбираю itemnmbr ...
добавлено автор Phillip O., источник

1 ответы

Я думаю, что ты на правильном пути. Ознакомьтесь с примерами этой страницы о том, как использовать get ().

угадать, что GetPartDesc никогда не попадает, или он не получает параметр, который вы ожидаете. Вероятно, это сработает, если вы измените:

        $.get("/PartsLabor/GetPartDesc", $(this).val(), function (data) {
            $("#ITEMDESC").val(data);
        });

чтобы:

        $.get("/PartsLabor/GetPartDesc", { itemnmbr: $(this).val() }, function (data) {
            $("#ITEMDESC").val(data);
        });

Но я не проверял его. Также я лично использую метод jQuery .ajax для такого рода вещей. Я никогда не пользовался, хотя чтение немного похоже на то, что вы должны работать. В любом случае вы можете попробовать что-то вроде этого:

    $.ajax({
            url: '/PartsLabor/GetPartDesc',
            data: { itemnmbr: $(this).val() }
        }).done(function (data) {
            $("#ITEMDESC").val(data);
        });
1
добавлено
Кроме того, вы знаете, что символ - это всего лишь один символ? если вы хотите, чтобы это было несколько символов, вам нужно объявить все ваши свойства как строки. Если вы используете автоматическую миграцию с инфраструктурой сущностей, она должна увидеть изменение и сказать вам, что вам нужно обновить свою БД.
добавлено автор Ben Tidman, источник
нет нет нет ... :) nullable char. как это. public ActionResult GetPartDesc (char? itemnmbr) См. эту ссылку msdn.microsoft.com/en-us/library/2cf62fcy%28v=vs.80%29.aspx
добавлено автор Ben Tidman, источник
сделать свой параметр в действии вашего контроллера нулевым, декальпируя его как char? itemnmbr. Добавьте логику, чтобы убедиться, что она HasValue перед ее использованием.
добавлено автор Ben Tidman, источник
хм ... это странно. Похоже, у вас другая проблема. Загружается ли страница вообще? Можете ли вы наткнуться на свою точку перерыва?
добавлено автор Ben Tidman, источник
Заменили все между <script type = "text/javascript"> и </script> кодом $ .ajax. Теперь я получаю ниже на загрузку страницы, а также две java-ошибки внизу OP. Не получите 500 Internal Error сейчас. [15: 10: 29.349] TypeError: e.nodeName не определено @ ~/Scripts/jquery-1.6.4.min.js: 3
добавлено автор Phillip O., источник
Страница загружается с java-ошибкой e.nodeName. Остальные два получаются, когда я выбираю что-то из раскрывающегося списка, затем нажмите ВЫКЛ выпадающего списка (где-либо еще на странице). Не остановился на моем контрольном пункте.
добавлено автор Phillip O., источник
Хм, теперь есть некоторые детали ошибки ... Загруженный Firebug, и эта внутренняя ошибка сервера дает мне: Ошибка сервера в '/' приложении. Словарь параметров содержит нулевую запись для параметра 'itemnmbr' не-nullable типа 'System.Char' для метода 'System.Web.Mvc.ActionResult GetPartDesc (Char)' в 'TechConnect.Controllers.PartsLaborController'. Необязательный параметр должен быть ссылочным типом, нулевым типом или объявлен как необязательный параметр. Имя параметра: параметры
добавлено автор Phillip O., источник
Я думал, что строка public ActionResult GetPartDesc (char itemnmbr) объявляет об этом? Такая же ошибка в Firebug в разделе «Параметры» показывает: ITEMNMBR 002-00079-02 , который является номером детали, который я выбрал ... Я также изменил все экземпляры itemnmbr на ITEMNMBR, чтобы устранить любую несогласованность там. Это соответствует имени поля в db. Возможно, я должен вырвать char и использовать varchar ? Поле db является полем char , но многие значения в нем являются числовыми, как указано выше ...
добавлено автор Phillip O., источник
хм ... Мне нужно будет увидеть, удастся ли программе попасть в db, если я изменю db.
добавлено автор Phillip O., источник
Ну, я идиот, и я удивлен, что это заняло у нас столько времени. Строка это так. Сейчас он работает как чемпион. И теперь, когда я думаю об этом, db говорит char (61) ... т.е. строку. Двойной идиот.
добавлено автор Phillip O., источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)