如何在MVC的Ajax调用中正确使用HTML.DropDownList
我使用SelectList构造函数(IEnumerable、String、String)以编程方式填充SelectList 我以前使用这种结构时,有一个ajax调用,它的成功方法是返回更新的模型——但它的主体(posify to AssignPermission(iUserID))根据下拉列表中选择的项对viewmodel进行操作如何在MVC的Ajax调用中正确使用HTML.DropDownList,ajax,asp.net-mvc,Ajax,Asp.net Mvc,我使用SelectList构造函数(IEnumerable、String、String)以编程方式填充SelectList 我以前使用这种结构时,有一个ajax调用,它的成功方法是返回更新的模型——但它的主体(posify to AssignPermission(iUserID))根据下拉列表中选择的项对viewmodel进行操作 $.ajax({ url: "~/../../User/AssignPermission", type: "PO
$.ajax({
url: "~/../../User/AssignPermission",
type: "POST",
data: $.postify({ "p_permId": optionSelectedPerm.value, "p_UserId": iUserId }),
cache: false,
success: function () {
ReloadUserPermissions();
},
error: function () {
// alert("FAIL"); //TODO ?
}
});
我试图为一个新页面复制这个结构,但是我没有使用Ajax调用的successresults方法,而是尝试在主要Ajax工作中返回更新的模型。。如果上面的例子是这样构造的,那么就没有success函数,controlleractionresult方法将返回更新后的模型。这不管用。我在调试时看到视图中的数据(已更新),但它没有更新视图
我是否必须使用Ajax调用的success函数来更新视图
<script type="text/javascript">
$(document).ready(function () {
var optionSelectedPerm;
var mvcTmpData_iCurrentRoleID;
});
function SelectedRole(p_lstRole) {
debugger;
mvcTmpData_iCurrentRoleID = $("#ddlSelectedRole").val();
$.ajax({
url: "~/../../AdminRoles/AdminRolePermissions",
type: "POST",
data: $.postify({ "p_nullRoleId": mvcTmpData_iCurrentRoleID }),
cache: false,
success: function () {
AjaxReloadRolePermissions();
},
error: function () {
},
});
function AjaxReloadRolePermissions() {
//alert("Current RoleID: " + mvcTmpData_iCurrentRoleID);
var url = '@Url.Action("ReloadRolePermissions", "AdminRoles", new { p_RoleId = "zReplaceRoleId" })';
window.location.href = url.replace('zReplaceRoleId', mvcTmpData_iCurrentRoleID);
}
}
</script>
$(文档).ready(函数(){
var期权选择Perm;
var mvcTmpData_iCurrentRoleID;
});
函数SelectedRole(PlstRole){
调试器;
mvcTmpData_iCurrentRoleID=$(“#ddlSelectedRole”).val();
$.ajax({
url:“~/../../AdminRoles/AdminRolePermissions”,
类型:“POST”,
数据:$.postfy({“p_nullRoleId”:mvcTmpData_iCurrentRoleID}),
cache:false,
成功:函数(){
AjaxReloadRolePermissions();
},
错误:函数(){
},
});
函数AjaxReloadRolePermissions(){
//警报(“当前角色ID:+mvcTmpData_iCurrentRoleID”);
var url='@url.Action(“重新加载RolePermissions”,“AdminRoles”,new{p_RoleId=“ZrPlaceRoleId”});
window.location.href=url.replace('zReplaceRoleId',mvcTmpData\u iCurrentRoleID);
}
}
请注意,为了完成第一个工作场景,Ajax调用“AssignPermission”中引用的控制器方法是EmptyResult类型的ActionResult,并标记为[HttpPost],因此它基本上可以工作,而不必担心实际返回。但是这个Ajax调用的Success函数允许我使用新调整的ViewModel更新视图
我复制原始结果的尝试失败了,我看到了模型内容,但它没有在视图中呈现如果有人关心的话,它非常简单Ajax函数的主要工作不能调用控制器操作来更新视图。但是,Ajax成功调用确实可以调用控制器的一个ActionResults来更新视图,然后更新该视图中的相关部分 ajax调用的主要部分中的控制器操作需要标记为EmptyResult&[HttpPost] 真正触发ActionResult以更新视图的控制器操作,在我的示例中,只返回视图和新修改的模型。。。再次请注意,前面引用的ajax函数的Success函数调用了它,上面的最后一篇代码几乎涵盖了这一切
$.ajax({
url: "~/../../User/AssignPermission",
type: "POST",
data: $.postify({ "p_permId": optionSelectedPerm.value, "p_UserId": iUserId }),
cache: false,
success: function () {
ReloadUserPermissions();
},
error: function () {
// alert("FAIL"); //TODO ?
}
});
<script type="text/javascript">
$(document).ready(function () {
var optionSelectedPerm;
var mvcTmpData_iCurrentRoleID;
});
function SelectedRole(p_lstRole) {
debugger;
mvcTmpData_iCurrentRoleID = $("#ddlSelectedRole").val();
$.ajax({
url: "~/../../AdminRoles/AdminRolePermissions",
type: "POST",
data: $.postify({ "p_nullRoleId": mvcTmpData_iCurrentRoleID }),
cache: false,
success: function () {
AjaxReloadRolePermissions();
},
error: function () {
},
});
function AjaxReloadRolePermissions() {
//alert("Current RoleID: " + mvcTmpData_iCurrentRoleID);
var url = '@Url.Action("ReloadRolePermissions", "AdminRoles", new { p_RoleId = "zReplaceRoleId" })';
window.location.href = url.replace('zReplaceRoleId', mvcTmpData_iCurrentRoleID);
}
}
</script>