Html.BeginForm没有传递参数

时间:2011-11-30 00:44:42

标签: asp.net-mvc forms razor drop-down-menu

我有以下代码填充下拉列表并自动提交表单,但它没有将id传回控制器。

<script type="text/javascript">
    $(function () {
        $("#ArticleID").change(function () {
            $('#TheForm').submit();
        });
    });
</script>

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" })){
    @Html.DropDownList("ArticleID", (SelectList)ViewBag.ArticleId, "Select Article") 
}

我明白了:

/Article/Details

但需要:

/Article/Details/1

我正在关注此时停止的教程。我不太清楚这里发生了什么TheForm我试图放ArticleID但这不起作用。我该怎么做?


我也尝试过没有像这样的jQuery,

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" })){

@Html.DropDownList(
"ArticleID",
(SelectList)ViewData["Articles"],
"Please Select an Article",
     new
     {
         onchange = "document.getElementById('TheForm').submit();"
     })
 }

但它不会通过任何一个发送参数。

1 个答案:

答案 0 :(得分:0)

在页面呈现之前确定网址:

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" }))

呈现:

<form action="/Article/Details" id="TheForm" method="post">

由于您要添加到网址的值ArticleID由下拉选项确定,因此您需要使用JavaScript操作表单的action属性。

这样的事可能有用:

<script type="text/javascript">
    $(function () {
        $("#ArticleID").change(function () {
            // The following line was changed to use @naspinski's suggestion
            var actionUrl = '@Url.Action("Details", "Article")/' + $('#ArticleID').val();
            $('#TheForm').attr('action', actionUrl);
            $('#TheForm').submit();
        });
    });
</script>

话虽如此,这让我觉得很尴尬。值得考虑如何使用或将要使用该值。它真的需要成为路线的一部分吗?如果没有,您可以完全避免操纵action属性。