2009-11-13 82 views
1

使用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> 
     ... 

在Web表单,我需要的功能,可以用一个UpdatePanel周围的下拉和DIV来完成。 Ajax.BeginForm()可以在这里获得帮助,或者需要在“OnChange”客户端事件上使用JScript吗?如果是这样,那么如何使用JScript更新视图的DIV部分?

任何帮助将是伟大的!

干杯, 马克

回答

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); 
} 

如果你的“获取”方法需要在同一个控制器上的动作更多的输入,只需将参数添加到方法中,并根据其他输入元素的值在加载调用中构造参数。

+0

看起来正是我在找什么。只有一个问题:将上面的JQuery脚本放到哪里?在标记顶部的脚本部分? – Marc 2009-11-13 15:14:24

+0

通常,我将我的脚本标记放在body元素的末尾,以便它们最后加载。大多数(所有?)浏览器都按顺序处理JavaScript请求,以便任何代码按其出现的顺序执行。在开始加载时,会延迟页面的其他任何元素并行加载,这可能会减慢整个页面的加载速度。 – tvanfosson 2009-11-13 15:26:47

+0

听起来不错。仍然尝试使用jscript。作为一个webforms-开发人员,我还没有做很多与jscript呃;)刚刚添加在我的身体结束你的jQuery脚本是这样的:这给了我一个“Microsoft JScript运行时错误:预期的对象”的错误我怎么会错过mhhh – Marc 2009-11-13 15:35:48