asp.net - DotNetNuke mvc 在 SelectList 更改时填写表单项
问题描述
我正在尝试根据下拉选择填充表单项,而不刷新整个页面或加载新视图。例如,这在使用 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);
}
}
解决方案
行。我发现的一种方法是简单地将 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);
}
}
但是,我当然愿意接受其他建议。
推荐阅读
- flutter - 在 Mobx.dart 存储中发生更改后,小部件不会重建
- smo - 如何在没有 Visual Studio 的情况下为 SQL 2017 安装 Microsoft.SqlServer.SqlManagementObjects (SMO)?
- javascript - 箭头函数作为对象方法
- python - 如何在 PCA(Python)中计算最佳特征数?
- c# - 如何更新 Elasticsearch 文档中的嵌套对象?
- python - 使用 python3 上传 WebDAV 文件
- azure-devops - 有没有办法在 Azure DevOps 查询中对估计和完成的工作进行总计?
- networking - 重置 Sonicwall TZ600
- r - 每行具有多个值的密度图
- ruby-on-rails - 设计注册控制器/页面行为