DotNetNuke mvc 在 SelectList 更改时填写表单项
DotNetNuke mvc fill in form items on SelectList change
我正在尝试根据下拉选择填充表单项,而不刷新整个页面或加载新视图。例如,这在使用 UpdatePanel 的 Web 表单中相当简单。但是,我不能让它在 MVC 中工作。
我已经尝试了很多我能找到的解决方案。我不知道这是否是 DotNetNuke 问题。
调试显示控制器触发并检索记录,但从未填充表单项。
我已经尝试了 jquery.post 和 .ajax 调用。都不行。
查看:
@inherits DotNetNuke.Web.Mvc.Framework.DnnWebViewPage<IMS.Model.lh.Associations>
@using IMT.LH.AssociationAdmin.Models
@using IMS.Model.lh
@{
ViewBag.Title = "Association";
}
<h2>Association</h2>
<div id="Associations-@Dnn.ModuleContext.ModuleId">
@Html.DropDownList("SelectAssociation")
</div>
<div id="Association-@Dnn.ModuleContext.ModuleId">'
@Html.LabelFor(m=>m.AssociationID)<br />
@Html.Label("Title")<br />
@Html.Label("Slug")<br />
@Html.Label("Description")<br />
@Html.Label("Tagline")<br/>
</div>
<script type="text/javascript">
const rvtoken = $("input[name='__RequestVerificationToken']").val();
const moduleId = @Dnn.ModuleContext.ModuleId;
const tabId = @Dnn.ModuleContext.TabId;
$.ajaxSetup({
headers: {
"RequestVerificationToken": rvtoken
}
});
$('#SelectAssociation').change(
function() {
$.post(
"/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
{
id: $(this).val()
}),
function() {
alert("success");
}
/*$.ajax({
url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
method: "Post",
data: {
id: $(this).val()
},
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
success: function() {
alert("success");
},
fail: function() {
alert("fail");
}
});
*/
});
</script>
控制器:
[HttpPost]
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
public ActionResult SelectAssociation()
{
ModelState.Clear();
int id = Convert.ToInt32(Request.Form["id"]);
using (var ac = new AssociationsController())
{
ac.GetById(id);
return PartialView("Index", ac.CurrentRec);
}
}
好的。我发现的一种方法是简单地 return 一个 json 对象到 .ajax 调用并解析它:
$.ajax({
cache: false,
dataType: 'json',
url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
method: "Post",
data: {
id: $(this).val()
},
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
success: function(data) {
//alert(data.AssociationID);
$('#AssociationID').text(data.AssociationID);
$('#Title').text(data.Title);
$('#Slug').text(data.Slug);
$('#Description').text(data.Description);
$('#Tagline').text(data.Tagline);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
console.log(jqXHR);
}
});
});
控制器:
[HttpPost]
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
public ActionResult SelectAssociation()
{
ModelState.Clear();
int id = Convert.ToInt32(Request.Form["id"]);
using (var ac = new AssociationsController())
{
ac.GetById(id);
return Json(ac.CurrentRec);
//return PartialView("Index", ac.CurrentRec);
}
}
但是,我当然愿意接受其他建议。
我正在尝试根据下拉选择填充表单项,而不刷新整个页面或加载新视图。例如,这在使用 UpdatePanel 的 Web 表单中相当简单。但是,我不能让它在 MVC 中工作。
我已经尝试了很多我能找到的解决方案。我不知道这是否是 DotNetNuke 问题。
调试显示控制器触发并检索记录,但从未填充表单项。
我已经尝试了 jquery.post 和 .ajax 调用。都不行。
查看:
@inherits DotNetNuke.Web.Mvc.Framework.DnnWebViewPage<IMS.Model.lh.Associations>
@using IMT.LH.AssociationAdmin.Models
@using IMS.Model.lh
@{
ViewBag.Title = "Association";
}
<h2>Association</h2>
<div id="Associations-@Dnn.ModuleContext.ModuleId">
@Html.DropDownList("SelectAssociation")
</div>
<div id="Association-@Dnn.ModuleContext.ModuleId">'
@Html.LabelFor(m=>m.AssociationID)<br />
@Html.Label("Title")<br />
@Html.Label("Slug")<br />
@Html.Label("Description")<br />
@Html.Label("Tagline")<br/>
</div>
<script type="text/javascript">
const rvtoken = $("input[name='__RequestVerificationToken']").val();
const moduleId = @Dnn.ModuleContext.ModuleId;
const tabId = @Dnn.ModuleContext.TabId;
$.ajaxSetup({
headers: {
"RequestVerificationToken": rvtoken
}
});
$('#SelectAssociation').change(
function() {
$.post(
"/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
{
id: $(this).val()
}),
function() {
alert("success");
}
/*$.ajax({
url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
method: "Post",
data: {
id: $(this).val()
},
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
success: function() {
alert("success");
},
fail: function() {
alert("fail");
}
});
*/
});
</script>
控制器:
[HttpPost]
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
public ActionResult SelectAssociation()
{
ModelState.Clear();
int id = Convert.ToInt32(Request.Form["id"]);
using (var ac = new AssociationsController())
{
ac.GetById(id);
return PartialView("Index", ac.CurrentRec);
}
}
好的。我发现的一种方法是简单地 return 一个 json 对象到 .ajax 调用并解析它:
$.ajax({
cache: false,
dataType: 'json',
url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
method: "Post",
data: {
id: $(this).val()
},
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
success: function(data) {
//alert(data.AssociationID);
$('#AssociationID').text(data.AssociationID);
$('#Title').text(data.Title);
$('#Slug').text(data.Slug);
$('#Description').text(data.Description);
$('#Tagline').text(data.Tagline);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
console.log(jqXHR);
}
});
});
控制器:
[HttpPost]
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
public ActionResult SelectAssociation()
{
ModelState.Clear();
int id = Convert.ToInt32(Request.Form["id"]);
using (var ac = new AssociationsController())
{
ac.GetById(id);
return Json(ac.CurrentRec);
//return PartialView("Index", ac.CurrentRec);
}
}
但是,我当然愿意接受其他建议。