将javascript挂起以丢弃列表更改

本文关键字:列表 javascript 挂起 | 更新日期: 2023-09-27 18:19:34

你好!

我目前的任务是有一个页面,通过下拉列表,用户可以选择一个甲板标题。一旦选择了标题,页面就应该回发该卡片组上的详细信息。

以下是我现在得到的:

@model IEnumerable<SCATChartsMVC.Models.Charts_DeckList>
@{
    ViewBag.Title = "Index";
    if (IsPost) { ViewBag.Title = "We posted back!"; }
}
<h2>Index</h2>
@{ var list = ViewData.Model.Select(cl => new SelectListItem
                                {
                                    Value = cl.RecNum.ToString(),
                                    Text = cl.DeckTitle.ToString()
                                });
}

@using (Html.BeginForm("Details", "Charts_DeckList", FormMethod.Post)) 
{ 
    @Html.DropDownList("deckTitles", list, "---------select---------")
    <input type="submit" name="submit" value="Submit" />
    @Html.ActionLink("Details", "Details", "Charts_DeckList", new { id = list.ElementAt(4).Text }, "")
}
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script>
    $("deckTitles").change(function () {
        if ($("#deckTitles").val() != "") {
            var test = {};
            test.url = "/Charts_DeckList/Details";
            test.type = "POST";
            test.data = JSON.stringify($('#deckTitles').val());
            test.datatype = "json";
            test.contentType = "application/json";
            test.success = true;
            test.error = function () { alert("Error!"); };
            $.ajax(test);
        }
    })
</script>

Html.BeginForm下的input标记和ActionLink是为了我自己的测试目的;如果我指定了元素,ActionLink就会正常工作。我希望每当用户点击一个选择时,而不是每当他们点击"详细信息"按钮时,都能传递类似的信息。

提交输入标记无效。它确实正确地路由到Charts_DeckList/Details,但操作中的参数始终为null。

我刚刚进入了整个MVC/Web的胡言乱语,所以有很多我不知道的事情,我甚至没有意识到我不知道。虽然我在互联网上看到了许多不同的资源在暗示不同的东西,但在这个时候,我已经忘记了很多网络开发术语,也忘记了这些东西在引擎盖下的工作方式,因为VS似乎自动地把很多东西组合在一起。

任何建议都将不胜感激。非常感谢。


巴里克下面的建议是正确的!

我还必须将脚本标记向上移动到BeginForm括号中。

将javascript挂起以丢弃列表更改

您没有在那里设置DropDownList的ID,第一个参数设置下拉列表的name属性(用于标识服务器回发上POST变量集合中的值)-您需要添加另一个参数来设置ID:

@Html.DropDownList("deckTitles", list, "---------select---------", new { @id = "deckTitles" });

然后,您可以在jQuery中选择如下所示的值:

$("#deckTitles option:selected").val();