Asp.net mvc 在mvc中以ajaxian方式更新下拉更改事件的数据
场景 我在页面上有下拉列表, 现在关于它的变化事件,我会 想从数据库中提取一些数据吗 然后显示它 我可以用回邮来做这件事,我 尝试使用Ajax.Beginform()但是 还在回帖子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')
细节
身份证件:
标题:
非常感谢您的帮助。您考虑过使用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();"