【问题标题】:How to update a view part on change of a select tag如何在更改选择标签时更新视图部分
【发布时间】:2010-12-16 07:40:25
【问题描述】:

使用 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 部分?

任何帮助都会很棒!

干杯, 马克

【问题讨论】:

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


    【解决方案1】:

    如果您想根据下拉列表中的更改更新 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”方法需要更多输入,只需向该方法添加参数,并根据其他输入元素的值在加载调用中构造参数。

    【讨论】:

    • 看起来正是我想要的。只有一个菜鸟问题:把上面的 JQuery 脚本放到哪里?在标记顶部的脚本部分中?
    • 通常我将脚本标签放在正文元素的末尾之前,以便最后加载它们。大多数(全部?)浏览器按顺序处理 javascript 请求,因此任何代码都按其出现的顺序执行。在开始时加载会延迟页面的任何其他元素并行加载,可能会减慢整个页面的加载速度。
    • 对我来说听起来不错。仍然尝试让 jscript 到位。作为一个 webforms 开发人员,我还没有对 jscript 做很多事情 uh ;) 只是在我的正文末尾添加了你的 jquery 脚本,如下所示: 。这给了我一个“Microsoft JScript 运行时错误:预期对象”错误。我错过了什么?mhhh
    • ups,刚刚发现我根本没有包含 jquery 脚本:-/ 现在我没有收到错误,但没有返回到控制器操作。必须进一步调试...
    • 现在一切正常。万一其他人也卡住了:我的最后一个错误是我用 [Authorized] 属性标记了我的控制器操作,就像我执行大多数其他操作一样。此类回调似乎不支持授权属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多