如何解决如何使用DI系统返回部分视图并调用模型的构造函数
我有一个父视图,并且想用ajax调用一个处理程序,该处理程序将返回部分视图。我遇到的问题是我的局部视图也需要具有自己的OnGet,OnPost等方法的模型。
呼叫时:
public PartialViewResult OnGetPartialView(Guid Id)
{
return Partial("MyPartialView");
}
我不知道如何为该视图添加模型,因为它的唯一构造函数需要几种通常由DI系统为我提供服务的服务。我还需要将ID传递给部分视图,如在OnGet方法中使用的那样(我假设它将在正常工作时被调用)。
谢谢!
解决方法
要将模型传递到剃须刀页面中的局部视图,您需要添加第二个参数作为返回到Partial时需要传递的模型:
return Partial("MyPartialView",model);
请注意,在MyPartialView
中,您需要删除页面第一行中的@Page 和add the model reference you passed
。
这将确保MyPartialView接收到模型数据,否则将出现模型为空的错误。
关于您提到的OnGet and OnPost
页面的MyPartialView
方法,如果删除@Page
,它们将失去实际的联系意义。
我的建议是,如果您有一些帖子或获取需要在MyPartialView中使用的方法,则可以将这些方法写入其他页面。
这是一个完整的示例:
TestModel.cshtml.cs:
public class TestModel : PageModel
{
public void OnGet()
{
}
public PartialViewResult OnGetPartialView(Guid Id)
{
List<Person> persons = new List<Person>()
{
new Person(){ Age = 12,FirstName = "dd",LastName = "aa" },new Person(){ Age = 13,FirstName = "bb",LastName = "ff" },new Person(){ Age = 14,FirstName = "ggr",LastName = "rwe" },};
return Partial("MyPartialView",persons);
}
public IActionResult OnPostTest()
{
return Content("aa");
}
}
TestModel.cshtml:
@page
@model WebApplication_razorpage_new.Pages.TestModel
@{
ViewData["Title"] = "Test";
Layout = "~/Pages/Shared/_Layout.cshtml";
}
<h1>Test</h1>
<input id="Button1" type="button" value="Get partial view" /><br /><br /><br />
<div id="partial" class="border"></div>
@section Scripts{
<script>
$(function () {
$("#Button1").click(function () {
$.ajax({
type: "get",url: "/Test?handler=PartialView",data: { Id: "780cd7ce-91b2-40fd-b4c8-7efa6b7c84a5" },success: function (data) {
$("#partial").html(data);
}
});
});
})
</script>
}
MyPartialView.cshtml:
@model List<Person>
<form method="post">
<input id="Button1" type="button" value="button" onclick="Click()" />
<input id="Text1" type="text" />
<table class="table table-bordered">
@foreach (var item in Model)
{
<tr>
<td>@item.Age</td>
<td>@item.FirstName</td>
<td>@item.LastName</td>
</tr>
}
</table>
</form>
<script>
function Click() {
$.ajax({
type: "POST",url: "/Test?handler=test",beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",$('input:hidden[name="__RequestVerificationToken"]').val());
},contentType: "application/json; charset=utf-8",success: function (data) {
$("#Text1").val(data);
}
});
}
</script>
这是测试结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。