我有以下代码填充下拉列表并自动提交表单,但它没有将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();"
})
}
但它不会通过任何一个发送参数。
答案 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
属性。