如何在更改选择标记时更新视图部分

时间:2009-11-13 14:32:03

标签: asp.net-mvc ajax select drop-down-menu

使用ASP.Net MVC 1.0我有一个带有一些输入控件的表单。其中一个是下拉列表(选择)。当用户更改此下拉列表时,我想使用RenderPartial()或类似的内容更新DIV标记。

我的观点目前看起来像这样:

<% using (var form = Html.BeginForm())
   { %>
       <label for="FieldIdentifier">Identifier:</label>
       <%=Html.TextBox("FieldIdentifier", Model.FieldIdentifier)%>
       ...

       <label for="DataType">DataType:</label>
       <%=Html.DropDownList("DataType", Model.AvailableDataTypes)%>

       <div id="DataTypeOptions">
          <% Html.RenderPartial("FieldDataTypeOptions", Model); %>
       </div>
       ...

在Webforms中,我正在寻找的功能可以通过下拉列表和DIV周围的UpdatePanel来完成。 Ajax.BeginForm()可以在这里帮助或者是否需要“OnChange”客户端事件上的JScript?如果是这样,如何使用JScript更新视图的DIV部分?

任何帮助都会很棒!

干杯, 马克

1 个答案:

答案 0 :(得分:2)

如果要根据下拉列表中的更改更新DIV,则需要在控制器上执行一个操作,该操作可以根据下拉值返回正确的部分视图。我建议使用jQuery为下拉列表添加更改处理程序,并调用操作以通过jQuery加载获取部分内容。

$(function() {
    $("#DataType").change( function() {
        $("#DataTypeOptions").load( '<%= Url.Action( "GetDataTypeOptions" ) %>?dataType=' + $(this).val() );
    });
});

(注意div名称的变化 - 我认为你有错字)

您在与

相同的控制器上执行操作
public ActionResult GetDataTypeOptions( string dataType )
{
    var model = ... uses dataType to get model ...

    return Partial( "FieldDataTypeOptions", model );
}

如果“Get”方法需要更多输入,只需在方法中添加参数,然后根据附加输入元素的值在加载调用中构造参数。