[英]Partial View not getting updated while return Updated Partial View. What am i missing?
我的HTML
@using (Html.BeginForm("userrights", "Users", FormMethod.Post, new { @class = "form-horizontal", role = "form", @id = "userrights_frm", @name = "userrights_frm" }))
{
<div class="form-group">
<div class="col-md-7" style="padding-right:10px">
@Html.TextBoxFor(m => m.firstname, new { @class = "form-control", @id = "firstname", @name = "firstname", @placeholder = "Serach By User Name" })
@Html.HiddenFor(m => m.id, new { @class = "form-control", @id = "id", @name = "id" })
</div>
<div class="col-sm-2">
<button type="submit" id="btn_search" value="Search" name="btn_search" class="btn btn-default">Search</button>
</div>
<div class="clearfix"></div>
</div>
<div class="form-group">
<div class="col-md-1" style="padding-top:7px"> Select Top Link </div>
<div class="col-sm-6">
@Html.DropDownList("selectedMenu", Model._menu.Select(menu => new SelectListItem { Text = menu.menuname, Value = menu.menuid.ToString() }), "Select Menu", new { @class = "form-control" })
</div>
<div class="clear"></div>
</div>
@Html.Partial("_userRightPartial", Model._UserRightPartialView)
<div class="clear"></div>
}
选择菜单上的AjaxMethod已更改
$("#selectedMenu").change(function () {
mnid = $(this).val();
userId = $("#userid").val();
$.ajax({
type: 'POST',
url: "/Users/getsubmenus",
data: "{userid:'" + userId + "',menuid:'" + mnid + "'}",
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (data) {
if (data.result == "Error") {
alert(data.message);
}
}
});
});
在Ajax中调用操作结果“ getsubmenus”
public ActionResult getsubmenus(string userid, string menuid)
{
userright _userright = new userright();
user _user = _ftwCommonMethods.GetuserDataById(Convert.ToInt32(userid));
UserRightPartialView _UserRightPartialView = new UserRightPartialView();
if (_user!=null)
{
IEnumerable<SubMenuListModel> _SubMenuListModel = _ftwCommonMethods.GetSubMenuItemsByMenu(_user.id.ToString(), menuid);
_UserRightPartialView.firstname = _user.firstname;
_UserRightPartialView.userid = _user.id;
_UserRightPartialView._SubMenuListModel = _SubMenuListModel;
}
return PartialView("_userRightPartial", _UserRightPartialView);
}
当我单击“搜索”按钮时
[HttpPost]
[AuthorizeUser]
public ActionResult userrights(FormCollection form_collection)
{
IEnumerable<MenuListModel> _MenuListModel = _ftwCommonMethods.GetMenuItems();
int userid = 0;
if (!string.IsNullOrEmpty(form_collection["id"].ToString()) && form_collection["id"].ToString() != "0")
{
userid = Convert.ToInt32(form_collection["id"].ToString());
}
user _user = _ftwCommonMethods.GetuserDataById(userid);
UserRightViewSearch _UserRightViewSearch = new UserRightViewSearch();
_UserRightViewSearch._menu = _MenuListModel;
if (_user != null)
{
IEnumerable<SubMenuListModel> _SubMenuListModel = _ftwCommonMethods.GetSubMenuItems(_user.id.ToString());
UserRightPartialView _UserRightPartialView = new UserRightPartialView();
_UserRightPartialView.firstname = _user.firstname;
_UserRightPartialView.userid = _user.id;
_UserRightViewSearch.id = _user.id;
_UserRightPartialView._SubMenuListModel = _SubMenuListModel;
_UserRightViewSearch._UserRightPartialView = _UserRightPartialView;
}
else
{
ViewData["message"] = "User Not Found.";
}
return View(_UserRightViewSearch);
}
部分视图
@model FTW_Admin.Models.UserRightPartialView
@if (Model.firstname != null)
{
<div class="dhe-example-section" id="ex-1-2">
<div id="example-1-2">
<div class="col-md-6" style="padding:0px 10px 10px 0px">
<div class="drag_to">@Model.firstname
@Html.Hidden("userid", Model.userid, new { @id = "userid" })
</div>
<div class="middle_section">
<div class="inner_section_page_sec">
<div id="container" class="main_page_area">
<div class="column left first">
<div>
<ul class="sortable-list-allow">
@foreach (var row in Model._SubMenuListModel)
{
if (row.allowd)
{
<li class="sortable-item loop_content">
<table id="dragable_grid">
<tr>
<th style="color:#000">
@row.submenuname
@Html.Hidden("submenuid", @row.submenuid, new { @id = "submenuid" })
@Html.Hidden("menuid", @row.submenuid, new { @id = "menuid" })
</th>
<th class="heading_style_a" style="text-align:right"><span class="allowedSpan"> Allowed</span></th>
</tr>
</table>
</li>
}
}
</ul>
<div class="clear"></div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
<div class="col-md-6" style="padding:0px 10px 10px 0px">
<div class="drag_to">Drag and Drop section to home screen section</div>
<div class="inner_section_page_sec">
<div class="main_page_area">
<div id="container">
<div class="column left">
<ul class="sortable-list-disallow">
@foreach (var row in Model._SubMenuListModel)
{
if (!row.allowd)
{
<li class="sortable-item loop_content">
<table id="dragable_grid">
<tr>
<th style="color:#000">
@row.submenuname
@Html.Hidden("submenuid", @row.submenuid, new { @id = "submenuid" })
@Html.Hidden("menuid", @row.submenuid, new { @id = "menuid" })
</th>
<th class="heading_style_a" style="text-align:right"><span class="allowedSpan">Denied</span></th>
</tr>
</table>
</li>
}
}
</ul>
</div>
</div>
<div class="clear"></div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
}
问题是,当我搜索记录时,最初会获得部分视图中的所有子菜单项。 然后我想做的是,当我在下拉菜单中选择特定菜单链接时,部分视图仅应使用所选菜单的子菜单进行更新
您的ajax函数指定json
的返回类型,但是您调用返回视图的controller方法。 然后在成功回调中,引用不存在的result
属性。 相反,您需要使用返回的局部视图来更新DOM。 此外,无需对传递给控制器的数据进行分类。 您的脚本应该是
$("#selectedMenu").change(function () {
mnid = $(this).val();
userId = $("#userid").val();
$.ajax({
type: 'POST',
url: '@Url.Action("getsubmenus", "Users")', // don't hard code url's
data: { userid: userId, menuid: mnid }, // no quotes
dataType: 'html', // change this
success: function (data) {
$(someElement).html(data); // modify selector to suit
}
});
});
旁注:您的局部渲染控件具有重复的id
属性(无效的html)和重复的name
属性,但没有索引器,因此您提交表单时将无法将其绑定到模型,尽管不清楚所有这些隐藏输入的含义是什么由于没有可以编辑的内容,因此您只需将完全相同的数据发回原样即可(降低您的应用程序的性能,并使自己免受过度发布的攻击)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.