【发布时间】:2019-04-09 23:35:15
【问题描述】:
我有一个可行的解决方案,但我不知道如何在从下拉列表中选择某个 ID 后重新加载页面。我的列表是从数据库中填充的。当我选择它时,我可以看到它的 ID 和相应的数据。但是,屏幕上没有任何变化。
模型类:
public List<Hello> getID()
{
var que = (from rel in db.Table1
select new Hello
{
ID = rel.R_ID
}).ToList();
return que;
}
public List<Hello> getStuff()
{
var que = (from wre in db.View
select new Hello
{
ID = wre.R_ID,
Summary = wre.Summary,
Description = wre.Description
}
}
getHello() 与 getStuff() 方法完全相同,只是接受一个字符串 ID 参数。
控制器类:
public ActionResult Index()
{
var model = test.getStuff();
ViewBag.IDs = new SelectList(test.getID(), "", "ID");
return View(model);
}
[HttpPost]
public JsonResult getDataBySelectedID(string selectedId)
{
var que = test.getHello(selectedId);
return Json(que, JsonRequestBehavior.AllowGet);
}
Partial_View 类:
<div class="container">
<table id="myTable" align="left">
<tr>
<th>@Html.DisplayNameFor(model => model.R_ID)</th>
<th>@Html.DisplayNameFor(model => model.Summary)</th>
<th>@Html.DisplayNameFor(model => model.Description)</th>
</tr>
@foreach (var item in Model)
{
<tr id="Home">
<td>@Html.DisplayFor(x => item.R_ID)</td>
<td>@Html.DisplayFor(x => item.Summary)</td>
<td>@Html.DisplayFor(x => item.Description)</td>
</tr>
}
</table>
</div>
查看类:
@Html.DropDownList("ID", ViewBag.IDs as SelectList)
<script>
$(document).ready(function () {
$("#ID").on("change", function () {
var selectedId = this.value;
var url = "/Sample/getDataBySelectedID";
$.ajax({
method: "POST",
dataType: "json",
url: url,
data: {
selectedId: selectedId
}
});
});
});
</script>
@foreach (var item in Model)
{
<tr>
<td>
@{Html.RenderPartial("Partial_Index", item);}
</td>
</tr>
}
如何重新加载带有所选值及其相应数据的页面?
任何帮助将不胜感激!
谢谢。
【问题讨论】:
-
由于您使用的是 AJAX,因此您必须在收到来自控制器的数据后以某种方式手动更新页面。您可以通过自己更新 HTML、将结果数据呈现为部分视图并将其注入页面或其他方式来完成此操作。仅通过 AJAX 加载数据不会自行更新页面上的任何内容。
-
感谢@Jack 的洞察力。我也可以参考任何来源以获得一些指导?
-
我推荐你走局部视图路线。我没有任何具体的链接,但我会在一秒钟内发布一个包含一些参考的答案。
-
@Jack 听起来不错,谢谢。
-
附带说明,如果您不介意回发,则可能不需要 AJAX。一个标准的表格就可以了。我假设您需要它,因为它在您的示例中。
标签: javascript jquery ajax asp.net-mvc entity-framework