Asp.net mvc 在mvc中以ajaxian方式更新下拉更改事件的数据

Asp.net mvc 在mvc中以ajaxian方式更新下拉更改事件的数据,asp.net-mvc,ajax,Asp.net Mvc,Ajax,场景 我在页面上有下拉列表, 现在关于它的变化事件,我会 想从数据库中提取一些数据吗 然后显示它 我可以用回邮来做这件事,我 尝试使用Ajax.Beginform()但是 还在回帖子 细节 身份证件: 标题: 非常感谢您的帮助。您考虑过使用jQuery吗?我用它来解决问题。 下面是一个适合我的例子: jQuery(document).ready(function() { // Dropdown or select list jQuery('#countryListBox')

场景

我在页面上有下拉列表, 现在关于它的变化事件,我会 想从数据库中提取一些数据吗 然后显示它

我可以用回邮来做这件事,我 尝试使用Ajax.Beginform()但是 还在回帖子


细节

身份证件:

标题:


非常感谢您的帮助。

您考虑过使用jQuery吗?我用它来解决问题。 下面是一个适合我的例子:

jQuery(document).ready(function() {

  // Dropdown or select list
  jQuery('#countryListBox').change(function(){ populateCityListBox(); });

  function populateCityListBox()
  {
    //Get ID for selected country
    var ctryID = jQuery("select#countryListBox").val();

    jQuery.post("inclyde/jquery_get_data.php", { instance: 'getCitiesByCountry', countryID: ctryID },
      function(data)
      {
          //Process data and store it in var newContent.
          // Then bind data to the div you wish to present the content
          jQuery("div.myNewText").html(newContent);

      }, "json");
  }
});

我很难让.NETAjax正常工作。在我发现jQuery之后,事情变得非常美好:)

我相信你对BeginForm的问题在于MVC总是进行一整页的回发——至少在我的经验中是这样。如果您想要“部分”回发,则需要使用javascript和Web服务

我正是用GeoIP做的。以下是我的页面的外观:

<p>
<label for="country">Country</label>
<%= Html.DropDownList("country", new SelectList(Model.Countries, "CountryId", "Name", Model.DefaultCountry.CountryId))%>
<%= Html.ValidationMessage("country")%>
</p>

<p>
<label for="subdivision">Subregion</label>
<%= Html.DropDownList("subdivision", new SelectList(Model.Subdivisions, "SubdivisionId", "Name", Model.DefaultSubdivision.SubdivisionId)) %>
<%= Html.ValidationMessage("subdivision")%>
</p>

<script type="text/javascript">

    $('#country').change(function() {

        $('#subdivision').children().remove();

        var countryId = $("#country > option:selected").val();

        Sys.Net.WebServiceProxy.invoke   
            (   
                '/WebServices/Regions.asmx',
                "GetSubdivisions",   
                false,
                { countryId: countryId },
                addressControl_bindOptionResults   
            );
    });

    function addressControl_bindOptionResults(data)   
    {   
        for (var x = 0; x < data.length; x++) {
            $("#subdivision").append($('<option></option>').val(data[x].Id).html(data[x].Name));  
        }   
    }

</script>
请记住,返回的对象必须是可序列化的

[WebMethod]
        public Subdivision[] GetSubdivisions(int countryId)
        {
            if (this.repository == null)
            {
                Resolve();
            }

            List<Subdivision> subdivisions = new List<Subdivision>(repository.GetActiveSubdivisionsDto(countryId));

            return subdivisions.ToArray();
        }
[WebMethod]
公共细分[]获取细分(国际国家ID)
{
if(this.repository==null)
{
解决();
}
列表细分=新列表(repository.getActiveSubsectionSDTO(countryId));
返回细分。ToArray();
}

忽略我的Web服务的一些内部工作。我的数据层使用unity、Nfluent和NHibernate,但基本原理是一样的。调用数据库,取回对象,并返回可序列化数据传输对象的列表(我的只是名称和Id)。

问题在于onchange=“this.form.submit();”。 当您通过form.submit()提交表单时,MS的Ajax脚本不会生效。 通过放置

<input type="submit" value="submit" /> 

在表单中,删除表单.submit()。控制器中的请求将是Request.IsAjaxRequest=true

我不知道如何以一种好的方式摆脱submit按钮——我使它不可见,并通过Javascript通过onchange单击它


这是我在MVC中第一次尝试ajax。然后我使用了jquery,我很高兴。

这是一个老话题,但我遇到了同样的问题,最终解决了这个问题:

更改:

onchange = "this.form.submit();" 
致:


我对使用ajax.beginform感兴趣,为什么上面的代码不起作用?
<input type="submit" value="submit" /> 
onchange = "this.form.submit();" 
onchange = "$(this.form).submit();"