【问题标题】:How do I get the selected item from drop down list and submit it to my Details view?如何从下拉列表中获取所选项目并将其提交到我的详细信息视图?
【发布时间】:2014-01-14 09:50:59
【问题描述】:

我有一个 mvc razor 表单。我想要的是从项目下拉列表中提交用户的选择并导航到详细信息视图以访问所选项目的信息。

目前,当我单击提交按钮时,我成功导航到详细信息视图,但那里绝对没有数据显示。

你能帮帮我吗?

查看

@using (Html.BeginForm("Details", "Bookings", FormMethod.Post))
{
<fieldset>
    <legend> Type/Item</legend>
    <label for="Items">Item Types </label>
    @Html.DropDownList("department", ViewBag.ItemTypesList as SelectList, "Select a Type", new { id = "ItemTypeID" })
    <div id="ItemsDivId">
        <label for="Items">Items </label>
        <select id="ItemsID" name="Items"></select>
    </div>
    <p>
        <input type ="submit" value="Submit" id="SubmitID" />
    </p>
 </fieldset>
}


    <script type="text/javascript">

        $('#ItemTypeID').on('change', function () {
            $.ajax({
                type: 'POST',
                url: '@Url.Action("GetItemTypeForm")',
            data: { itemTypeId: $('#ItemTypeID').val() },
            success: function (results) {
                var options = $('#ItemsID');
                options.empty();
                options.append($('<option />').val(null).text("- Select an Item -"));
                $.each(results, function () {
                    options.append($('<option />').val(this.ItemsID).text(this.Value));
                });
            }
        });
    });
</script>

控制器:

 public ActionResult Details(string id)
        {
            var item = db.Items.Find(id);

            return View(item);
        }

[HttpPost]
        public JsonResult GetItemTypeForm(string itemTypeId)
        {
            //pseudo code
            var data = from s in db.Items
                       where s.ItemType.ItemTypeName == itemTypeId
                       select new { Value = s.ItemName, ItemsID = s.ItemId };


            return Json(data);
        }

【问题讨论】:

    标签: c# asp.net ajax asp.net-mvc razor


    【解决方案1】:

    如果要获取 Items 值,请在 Details 方法中使用 Items

      public ActionResult Details(int Items)
        {
            var item = db.Items.Find(Items);
    
            return View(item);
        }
    

    【讨论】:

    • 这不是我想从中获取值的下拉列表:) 我想从这里获取它:
    • 非常感谢穆拉利!我使用 int Items 并且工作正常:)
    【解决方案2】:

    下拉列表只发送简单的值。该名称通常必须与方法签名中的参数名称相匹配。请记住,查询字符串中的键是 name 属性,而不是 id 属性。因此,在此示例中使用了部门,并在 @Murali 的答案中使用了项目。

    尝试将您的详细信息方法更改为:

     public ActionResult Details(string department)
        {
            var item = db.Items.Find(department);
    
            return View(item);
        }
    

    【讨论】:

    • 你为什么把department改成ItemTypeIDdepartment 是正确的,MVC 使用名称来绑定值而不是 id :)
    • 这不是我想从中获取值的下拉列表:) 我想从这里获取它:
    • 您没有为那个提供代码;-) 您应该能够将这个解决方案应用于另一个下拉列表。只需相应地更改参数名称即可。
    • 我正在使用 jquery 填充第二个下拉列表,我想使用这个下拉列表的值
    • 我尝试在我的详细信息视图中使用“ItemsID”,但没有得到任何东西:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多