我正在开发MVC3中的应用程序 我需要在点击下拉菜单时显示部分视图 为此,我写了一个ajax,
$("#UserName").change(function () {
var userid = $("#UserName").val();
var ProvincialStateID = $("#State").val();
var Hobbyid = $("#Hobby").val();
var Districtid = $("#DistrictNames").val();
var Homeid = $("#Hobbyhome_EstablishmentId").val();
var urlperson = '@Url.Action("FetchPersonByUserName")';
$.ajax({
type: "POST",
url: urlperson,
data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
success: function (data) {
}
});
});
我在控制器中写了一个函数:
[HttpPost]
public ActionResult FetchPersonByUserName(int userid,int stateid,int districtid,int homeid,int Hobbyid)
{
//Code to fetch data using all the parameters
return PartialView("_LearnerAssociationGridPartial", list);
}
从这里进入部分视图,我也可以看到数据
但是虽然它在前端,但我无法看到数据
请帮助我,也许我的ajax可能有问题,请告诉我我的错误。
这是我的主视图:
@model HobbyHomesWebApp.ViewModel.LearnerAssociationViewModel
@{
Layout = "~/Views/Shared/_LayoutPostLogin.cshtml";
}
@using (Html.BeginForm("LearnerAssociation", "Registration", FormMethod.Post))
{
@Html.ValidationSummary(true)
<table>
<div>
@{Html.RenderPartial("_LearnerAssociationWebPartial", Model.learner);}
</div>
</table>
<table>
<div id="result">
@{Html.RenderPartial("_LearnerAssociationGridPartial", Model.LearnerList);}
</div>
</table>
}
ajax函数写在第一个视图中,下拉列表在第一个视图中
现在,在第一个视图中单击下拉列表,我希望数据显示在第二个视图中的网格中。
我的第一个观点是:
@using (Html.BeginForm("LearnerAssociation", "Registration", FormMethod.Post))
{
<table>
<tr>
<td>
@Html.Label(@Resources.selectusername)
</td>
<td>:</td>
<td>
<div class="editor-field">
@Html.DropDownListFor(model => model.Loginaccount.LoginAccountID, new SelectList(ViewBag.UserName, "LoginAccount.LoginAccountID", "FirstName"), "--Select UserName--", new { @id = "UserName" })
</div>
</td>
</tr>
</table>
}
答案 0 :(得分:3)
编辑:好的,如果我理解正确,你的观点应如下所示:
@model HobbyHomesWebApp.ViewModel.LearnerAssociationViewModel
@{
Layout = "~/Views/Shared/_LayoutPostLogin.cshtml";
}
@using (Html.BeginForm("LearnerAssociation", "Registration", FormMethod.Post))
{
@Html.ValidationSummary(true)
<table>
<tr>
<td>
<div>
@{Html.RenderPartial("_LearnerAssociationWebPartial", Model.learner);}
</div>
</td>
</tr>
</table>
<table>
<tr>
<td>
<div id="result">
</div>
</td>
</tr>
</table>
}
这意味着当您第一次加载页面时,第二个div
中不会显示任何内容。
然后,您希望根据所选值将部分视图加载到div
。首先,添加javascript以调用您已描述的操作。
$('#NameOfYourDropDownList').change(function () {
var userid = $('#NameOfYourDropDownList').val();
var ProvincialStateID = $("#State").val();
var Hobbyid = $('#Hobby').val();
var Districtid = $('#DistrictNames').val();
var Homeid = $('#Hobbyhome_EstablishmentId').val();
var urlperson = "@Url.Action('FetchPersonByUserName')";
$.ajax({
type: 'POST',
url: urlperson,
data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
success: function (data) {
$('#result').html(data);
}
});
});
ActionResult
将返回HTML。在您的成功函数中,您将其指定为div
的HTML。
答案 1 :(得分:0)
我希望我理解你想要的东西(如果我不这样做,不要开枪)
让我们假设你有一个标签
<div id="Returned-Content-Container">
</div>
我会提出2个建议(选择你喜欢的)
Razor引擎,MVC风格:
使用代码创建表单时:
@using (Html.BeginForm("LearnerAssociation", "Registration", FormMethod.Post))
将FormMethod.Post替换为
@using (Html.BeginForm("LearnerAssociation", "Registration",
new AjaxOptions()
{
HttpMethod = "POST",
UpdateTargetId = "Returned-Content-Container",
InsertionMode = InsertionMode.Replace
})
{
// Your form fields go here
}
这是做什么的,在返回数据时,它用从ajax调用返回的数据替换定义的标记。自动。
这种方式是使用剃须刀引擎。
如果您想以jquery的方式执行此操作,请执行以下操作:
$("#UserName").change(function () {
var userid = $("#UserName").val();
var ProvincialStateID = $("#State").val();
var Hobbyid = $("#Hobby").val();
var Districtid = $("#DistrictNames").val();
var Homeid = $("#Hobbyhome_EstablishmentId").val();
var urlperson = '@Url.Action("FetchPersonByUserName")';
$.ajax({
type: "POST",
url: urlperson,
data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
success: function (data) {
// This places all data returned into the defined DOM element
$('#Returned-Content-Container').html(data);
}
});
});
希望这有帮助,
祝你好运!