MVC3 C#Entity Framework根据下拉列表选择填充文本框

时间:2012-12-28 13:42:29

标签: c# jquery asp.net-mvc-3 entity-framework

我试过几个链接,这导致我的代码......这不起作用:D

Get The Drop on DropDownListsCreating 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)
    <fieldset>
        <legend>Add part to call: @ViewBag.CALLNBR</legend>

            @Html.LabelFor(model => model.ITEMNMBR, "Item Number")
            @Html.DropDownList("ITEMNMBR", (SelectList) ViewBag.Items, "Please Select a Part #")
            @Html.ValidationMessageFor(model => model.ITEMNMBR)
        <br />
            @Html.LabelFor(model => model.ITEMDESC, "Description")
            @Html.EditorFor(model => model.ITEMDESC)
            @Html.ValidationMessageFor(model => model.ITEMDESC)
        <br />
            <input type="submit" class="submit" value="Add Part" />

    </fieldset>
}

控制器代码:

    [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错误控制台返回:

  

时间戳: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 Line:3

Firefox Web控制台返回这两个以及下面的内容(介于上面两个之间):

  

请求网址:〜/ PartsLabor / GetPartDesc?002N02337   请求方法:GET   状态代码:HTTP / 1.1 500内部服务器错误

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上。查看this page上有关如何使用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方法来做这种事情。我从来没有用过get,虽然看起来有点像你应该工作的东西。无论如何,你可以尝试这样的事情:

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