我正在使用 MVC4,并且布局中有一个菜单。我的菜单的一部分包含一个下拉列表,用户可以在其中选择可用的提供商。
<div class="row">
<div class="col-md-4">
@Html.DropDownListFor(x=> x.usr.DatUsrs.IdProvider, new SelectList(Lista, "Value","Text"))
</div>
<div class="col-md-3">
Credit
@Html.DisplayTextFor(x=> x.usrSelectedProvider.AvailiableCredit)
</div>
<div class="col-md-3">
TEXT
</div>
<div class="col-md-2">
Closing Day @Html.DisplayTextFor(m=> m.usrSelectedProvider.ClosingDay)
</div>
</div>
我遇到的问题是:当用户更改下拉列表中的选定项目时,我想进行回发以便能够加载 AvailiableCredit 和 ClosingDay。在网络表单中我可以使用自动回发来做到这一点,但我还没有找到在 MVC4 中做到这一点的方法
最佳答案
有几种方法可以做到这一点,但首先你需要了解你正在做的事情的结构。
它不是 MVC 中的“回发”(或者,实际上,一般来说,在 HTTP 中……WebForms 对你撒谎)。您要做的只是将数据发布到服务器并接收响应。在 MVC 框架中,该帖子的目标是 Controller 操作。响应可以是几个不同的事情,具体取决于您采取的方法。
我建议编写一些 JavaScript 来通过 AJAX 执行此任务。这样页面不会刷新,您只是发送/接收与手头特定任务相关的数据。 ASP.NET MVC 带有 jQuery,所以我将假设在这种情况下使用 jQuery。
首先,您需要绑定(bind)到 select
的更改事件。元素。它可能被标识为 id
“IdProvider”,但您需要检查呈现的 HTML 以确保。假设它是,你可以使用这样的东西:
$('#IdProvider').change(function () {
// respond to the change event in here
});
现在您可以在该处理程序中对服务器进行 AJAX 调用。它可能很简单:
var selectedValue = $('#IdProvider').val();
$.post('@Url.Action("MyAction", "MyController")', { selection : selectedValue }, function (data) {
// handle the server response here
});
这样, Controller 操作将在名为
selection
的参数中提供所选值。 :public ActionResult MyAction(string selection)
{
// do your server-side processing and get your data
return Json(data);
}
此操作返回 Json 格式的数据,因为客户端上的 JavaScript 正在使用它。所以在处理
$.post()
中的响应时在上面调用,您将在 data
中获得该数据那里的值(value)。您如何处理 JavaScript 代码中的数据取决于您自己。如果它是一个包含您正在寻找的两个值的简单结构,它可能就像这样简单:
$('#AvailableCredit').text(data.AvailableCredit);
$('#ClosingDay').text(data.ClosingDay);
或者,您可以包装
select
form
中的元素并在选择更改时发布整个内容,然后 Controller 操作将要返回 View
在该 View 中填充数据。但这可能有点矫枉过正,因为您要做的就是发送一个值并接收两个值。
关于asp.net-mvc - 下拉列表更改的 MVC 4 回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19933115/