C# 从下拉列表中选择值时如何回发到控制器函数

C# 从下拉列表中选择值时如何回发到控制器函数,c#,html,asp.net-mvc,asp.net-mvc-3,razor,C#,Html,Asp.net Mvc,Asp.net Mvc 3,Razor,我已经在视图上创建了一个下拉列表,并显示了一个列表 @Html.DropDownListFor(m => m.SelectedId, new SelectList(Model.List, "ID", "Name")) 我想在用户从下拉列表中选择值时刷新页面。 我不知道如何在不单击任何按钮的情况下将选择事件从下拉列表映射到控制器函数 在视图加载上有一个控制器函数,它用列表填充视图 public ActionResult Populate() { List<string> l

我已经在视图上创建了一个下拉列表,并显示了一个列表

@Html.DropDownListFor(m => m.SelectedId, new SelectList(Model.List, "ID", "Name"))
我想在用户从下拉列表中选择值时刷新页面。 我不知道如何在不单击任何按钮的情况下将选择事件从下拉列表映射到控制器函数

在视图加载上有一个控制器函数,它用列表填充视图

public ActionResult Populate()
{
  List<string> list = get it from sql server
  ViewModel viewModel = new ViewModel();
  viewModel.list = list;
   return view();
}
公共操作结果填充()
{
List=从sql server获取它
ViewModel ViewModel=新ViewModel();
viewModel.list=列表;
返回视图();
}

但是,如何调用控制器函数,该函数将所选值作为Id,检索数据并用结果刷新页面。

如果没有javascript帮助,就无法执行此操作。只需绑定select事件并发送表单或发出ajax请求

使用jQuery:

$('#yourDropDownId').change(function(){
    $('#yourFormId').submit();
});
或者如果您需要ajax调用而不是提交或使用

m.SelectedId,新的SelectList(Model.List,“ID”,“Name”),新的{onchange=“this.form.submit();”})%>

这很简单。在javascript中,您有:

 $(document).ready(function () {
            $('#SelectedId').change(function () {
                var id = $(this).val();
                $.getJSON("/YourController/YourAction", { id: id},
                function (data) {               
                    $("#SomeDivSelector").html(data);
                });
            });

        });
您的控制器应该如下所示:

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult YourAction(int id)
{
  //do something
  return Json(ControlToString("~/Views/YourController/YourView.cshtml", yourModelWithData), JsonRequestBehavior.AllowGet);
}
和ControlToString的定义如下:

 private string ControlToString(string controlPath, object model)
        {
            //CshtmlView control = new CshtmlView(controlPath);
            RazorView control = new RazorView(this.ControllerContext, controlPath, null, false, null);

            this.ViewData.Model = model;

            using (System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter(new System.IO.StringWriter()))
            {
                control.Render(new ViewContext(this.ControllerContext, control, this.ViewData, this.TempData, writer), writer);

                string value = ((System.IO.StringWriter)writer.InnerWriter).ToString();
                return value;
            }
        }

关于。

您想要应用什么,与您正在使用的技术概念相反。 MVC基于ASP.NET技术,但另一种执行方式。MVC没有更好地利用ASP.NET的生命周期,所以,没有“回发”。MVC——在根目录中基于架构模式,允许分离任何系统的不同层,因此当前技术的开发方法完全不同。了解有关MVC的更多信息:


如果您仍然想实现您的问题,您可以使用ASP.NET概念并使用DropDownList控件的AutoPostback属性

将此添加到头部布局中:

<script type="text/javascript">
    $(document).ready(function () {
        $('select:[autopostback=true],input[type=checkbox]:[autopostback=true],input[type=radio]:[autopostback=true]').live('change',function () {
            $(this).closest('form').submit();
        });
    });
</script>

当您更改dropdownlist的选择时,将提交dropdownlist所在的表单。如果该表单的操作结果是相同的页面,则会重新加载正在更新的任何内容

您能分享一个示例吗。。。或者与此相关的博客文章?如果您以后决定增强功能,那么这种方法可能很容易添加ajax行为。
 private string ControlToString(string controlPath, object model)
        {
            //CshtmlView control = new CshtmlView(controlPath);
            RazorView control = new RazorView(this.ControllerContext, controlPath, null, false, null);

            this.ViewData.Model = model;

            using (System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter(new System.IO.StringWriter()))
            {
                control.Render(new ViewContext(this.ControllerContext, control, this.ViewData, this.TempData, writer), writer);

                string value = ((System.IO.StringWriter)writer.InnerWriter).ToString();
                return value;
            }
        }
<script type="text/javascript">
    $(document).ready(function () {
        $('select:[autopostback=true],input[type=checkbox]:[autopostback=true],input[type=radio]:[autopostback=true]').live('change',function () {
            $(this).closest('form').submit();
        });
    });
</script>