AJAX调用MVC中的OnChange事件

时间:2010-11-02 14:17:32

标签: c# asp.net-mvc

我必须在下拉列表的onchange事件上进行AJAX调用,该下拉列表是视图的一部分。在更改事件上,我需要调用数据库,执行一些计算显示UI,然后使用计算来填充图表控件。 UI显示按此顺序显示。 图表 下拉类别列表 具有评级分数的子类别列表 因此,我需要在更改事件中显示div3中的类别评级,使用评级分数填充图表。 在.NET中轻松完成但是如何在MVC中完成?我能想到的唯一选择是使用代码创建用户控件,但这会破坏使用MVC的目的。 任何帮助表示赞赏。

5 个答案:

答案 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帖子

中找到了它