我必须在下拉列表的onchange事件上进行AJAX调用,该下拉列表是视图的一部分。在更改事件上,我需要调用数据库,执行一些计算显示UI,然后使用计算来填充图表控件。 UI显示按此顺序显示。 图表 下拉类别列表 具有评级分数的子类别列表 因此,我需要在更改事件中显示div3中的类别评级,使用评级分数填充图表。 在.NET中轻松完成但是如何在MVC中完成?我能想到的唯一选择是使用代码创建用户控件,但这会破坏使用MVC的目的。 任何帮助表示赞赏。
答案 0 :(得分:9)
以下是关于如何实现这一点的一般概念。
<script type="text/javascript">
// assuming you're using jQuery
$("#ddlAjax").change( function (event) {
$.ajax({
url: "Controller/GetPartialGraph/" + $(this).val(),
data: { id = $(this).val() /* add other additional parameters */ },
cache: false,
type: "POST",
dataType: "html",
success: function (data, textStatus, XMLHttpRequest) {
$("#divPartialView").html( data ); // HTML DOM replace
}
});
});
</script>
<select id="ddlAjax">
... list of options
</select>
<div id="divPartialView">
<!-- something like this in your ASP.NET View -->
<%= Html.RenderPartial("MyPartialView", Model) %>
</div>
这是你的控制器动作方法。
[HttpPost]
public PartialViewResult GetPartialGraph(int id /* drop down value */)
{
// do calculations whatever you need to do
// instantiate Model object
var model = myBusinessLogicService.DoCalculations(id);
return PartialView("MyPartialView", model);
}
我认为这是您正在寻找的答案。
答案 1 :(得分:2)
好的,如果您希望在下拉列表更改时调用onchange事件,这可能会有所帮助:
@Html.DropDownListFor(
model => model.SelectedId,
new SelectList(ViewBag.Ids, "Id", "Name"),
"[All]",
new { onchange = "onChangeId();", @id ="municipalityDropDown" }
)
然后你可以拥有这个javascript代码和你ajax代码。以下是调用操作方法的jax代码示例。
function onChangeId() {
jQuery.ajax({
url: '@Url.Action("Action Method Name", "Controller Name")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ data: data2 }),
success: function (result) { }
});
}
答案 2 :(得分:1)
查看使用局部视图。如果你谷歌ASP.Net MVC部分视图有很多链接,但这里有一个我发现交互
http://blog.stevensanderson.com/2008/10/14/partial-requests-in-aspnet-mvc/
答案 3 :(得分:0)
我不确定我是否完全理解你要做的事情,但在MVC中,我可能会处理它的方式是将几个AJAX调用链接在一起。第一个根据选择更新类别评级。这可能会返回JSON,以便您可以轻松提取评分。第二个采用第一个返回的评级分数,并调用将图表呈现为HTML的操作 - 即,它呈现返回并插入文档中适当位置的部分视图。
答案 4 :(得分:0)
是的,这是对的 - 只有改变正在取代:
onchange = “this.form.submit();”
使用:
onchange = “$(this.form).submit();”
在this帖子
中找到了它