根据MVC3中的下拉选择加载部分视图

时间:2012-08-02 09:34:56

标签: asp.net-mvc-3 razor asp.net-ajax

我试图用asp.net创建一个mvc3。

我有一个带有一些选项的下拉列表。 我想要的是要注入页面的不同局部视图,具体取决于下拉列表中的选择。

但是。我不希望这依赖于提交动作。它应该起作用,一旦从选择列表中选择,就会加载局部视图。

我有这段代码:

@using (Ajax.BeginForm("Create_AddEntity", new AjaxOptions { 
    UpdateTargetId = "entity_attributes", 
    InsertionMode = InsertionMode.Replace
    }
))
{
        <div class="editor-label">
            @Html.Label("Type")
        </div>
        <div class="editor-field">
            @Html.DropDownList("EntityTypeList", (SelectList)ViewData["Types"])
        </div>

        <div id="entity_attributes"></div>
        <p>
            <input type="submit" value="Create" />
        </p>
}

但是当下拉列表选择发生变化时,我无法弄清楚如何触发此部分视图加载。

这一点是不同“实体类型”的形式不同。因此将根据下拉选择加载不同的局部视图。

有人有任何指示吗?

2 个答案:

答案 0 :(得分:33)

让我们假设您想要插入部分内容。

<html>
    <head><head>
    <body>
        <!-- Some stuff here. Dropdown and so on-->
        ....

        <!-- Place where you will insert your partial -->
        <div id="partialPlaceHolder" style="display:none;"> </div>
    </body>

</html>

在你的下拉列表的更改事件中,通过jquery ajax调用获取部分并将其加载到占位符。

/* This is change event for your dropdownlist */
$('#myDropDown').change( function() {

     /* Get the selected value of dropdownlist */
     var selectedID = $(this).val();

     /* Request the partial view with .get request. */
     $.get('/Controller/MyAction/' + selectedID , function(data) {

         /* data is the pure html returned from action method, load it to your page */
         $('#partialPlaceHolder').html(data);
         /* little fade in effect */
         $('#partialPlaceHolder').fadeIn('fast');
     });

});

在您的控制器操作中,在/ jquery上面是/ Controller / MyActionin,返回您的局部视图。

//
// GET: /Controller/MyAction/{id}

public ActionResult MyAction(int id)
{
   var partialViewModel = new PartialViewModel();
   // TODO: Populate the model (viewmodel) here using the id

   return PartialView("_MyPartial", partialViewModel );
}

答案 1 :(得分:0)

将以下代码添加到项目的标题(布局)中。 将“combobox”添加到任何组合框(选择框),您想要触发它周围的表单。

$(document).ready(function () {
    $('.formcombo').change(function () {
        /* submit the parent form */
        $(this).parents("form").submit();
    });
});