空视图包和局部视图
Null view bag and partial view
我正在尝试使用部分视图,但我完全迷路了。最初我试图将动态数据传递给局部视图,但当您按下 google 浏览器 F12 键时,我最终得到了 403 禁止。
我已将部分视图缩减为一个字段,认为这将允许它加载数据
<table cellpadding="1" border="1">
<tr>
<th>
FIELD LBL1
</th>
</tr>
@foreach (MvcProgram.Models.LIST_FULL item in @ViewBag.ListFull)
{
<tr>
<td>
@item.FIELD1_DATA
</td>
</tr>
}
</table>
向我表明 mvc 无法使用视图包推送动态数据的错误,因为它说是禁止的。所以我放弃了这个想法,因为我尝试了各种失败的解决方法。现在我只想用视图包中的静态数据填充部分视图,但我猜是因为当页面位于立即失败的创建视图上时没有创建列表的价值。出现此错误:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
它在我的部分视图的 foreach 循环中停止
@foreach (ComputerProgram.Models.LIST_FULL item in @ViewBag.ListFull)
那么 MVC 可以在创建视图时完全使用分部视图吗?我的列表是使用下拉列表中的 ID 构建的,但是当然在用户对表单进行交互之前,在创建视图时没有选择。
所以我的问题是 MVC 甚至能够在创建视图中呈现部分视图,或者这是由于某些 mvc 限制只能在 webforms 中执行的操作。
创建视图
<div class="col-sm-6">
<div class="form-horizontal" style="display:none" id="PV_IssueList">
@Html.Partial("_VehIssuesListPartial")
</div>
</div>
我似乎能够让这个 MVC 创建视图来显示局部视图的唯一方法是构建视图包的列表,并用已知的记录填充它以进行呈现。这不可能是正确的:部分视图是否只能在屏幕上已有数据的屏幕上使用?
CONTROLLER CODE 表示 get 和 post 的代码:
// GET: VRS_REQUEST/Create**********************************
public ActionResult Create()
{
some code stuff
ViewBag.VehIssuesList = GetList(808); //Force it to get something so that the page loads
return View(model);
}
Post创建代码:
// POST: VRS_REQUEST/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(int RES_ID, FormCollection Collection, [Bind(Include = Some Fields....
{
//ViewBag.ListFull = GetList(RES_ID);
//UpdateList(int.Parse(Collection["RES_ID"])); // Was part of the attempt at dynamic data for partial view that shows forbidding
... CODE THAT DOES STUFF
return RedirectToAction("Index");
}
return View(model);
}
当前代码的工作方式是忽略下拉列表,只填充我硬编码的值。有人会说我为什么要使用 view bag,这就是我所知道的。我根本不懂模型。如果这不能通过创建视图来完成,因为屏幕是空的,那么对我来说很酷 - 我只需要知道这一点。
这是我的代码,因为我放弃了尝试再次使用动态数据执行此操作的想法 MVC 说它是被禁止的。
如果我从创建控制器获取函数中删除它,页面将不会加载并且我得到空错误;
ViewBag.VehIssuesList = GetList(808);
我必须强制加载页面的值...这又是因为我试图在创建视图上执行此操作而 MVC 无法处理吗?
_WidgetListPartial
@if 语句将处理空情况。如果局部视图的数据返回为空。
@if (@ViewBag.AList != null)
{
<table cellpadding="1" border="1">
<tr>
<th>
Widget Name
</th>
</tr>
@foreach (MvcProgramX.Models.LIST_FULL item in @ViewBag.AList)
{
<tr>
<td>
@item.WidgetName
</td>
</tr>
}
</table>
}
我正在尝试使用部分视图,但我完全迷路了。最初我试图将动态数据传递给局部视图,但当您按下 google 浏览器 F12 键时,我最终得到了 403 禁止。
我已将部分视图缩减为一个字段,认为这将允许它加载数据
<table cellpadding="1" border="1">
<tr>
<th>
FIELD LBL1
</th>
</tr>
@foreach (MvcProgram.Models.LIST_FULL item in @ViewBag.ListFull)
{
<tr>
<td>
@item.FIELD1_DATA
</td>
</tr>
}
</table>
向我表明 mvc 无法使用视图包推送动态数据的错误,因为它说是禁止的。所以我放弃了这个想法,因为我尝试了各种失败的解决方法。现在我只想用视图包中的静态数据填充部分视图,但我猜是因为当页面位于立即失败的创建视图上时没有创建列表的价值。出现此错误:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
它在我的部分视图的 foreach 循环中停止
@foreach (ComputerProgram.Models.LIST_FULL item in @ViewBag.ListFull)
那么 MVC 可以在创建视图时完全使用分部视图吗?我的列表是使用下拉列表中的 ID 构建的,但是当然在用户对表单进行交互之前,在创建视图时没有选择。
所以我的问题是 MVC 甚至能够在创建视图中呈现部分视图,或者这是由于某些 mvc 限制只能在 webforms 中执行的操作。
创建视图
<div class="col-sm-6">
<div class="form-horizontal" style="display:none" id="PV_IssueList">
@Html.Partial("_VehIssuesListPartial")
</div>
</div>
我似乎能够让这个 MVC 创建视图来显示局部视图的唯一方法是构建视图包的列表,并用已知的记录填充它以进行呈现。这不可能是正确的:部分视图是否只能在屏幕上已有数据的屏幕上使用?
CONTROLLER CODE 表示 get 和 post 的代码:
// GET: VRS_REQUEST/Create**********************************
public ActionResult Create()
{
some code stuff
ViewBag.VehIssuesList = GetList(808); //Force it to get something so that the page loads
return View(model);
}
Post创建代码:
// POST: VRS_REQUEST/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(int RES_ID, FormCollection Collection, [Bind(Include = Some Fields....
{
//ViewBag.ListFull = GetList(RES_ID);
//UpdateList(int.Parse(Collection["RES_ID"])); // Was part of the attempt at dynamic data for partial view that shows forbidding
... CODE THAT DOES STUFF
return RedirectToAction("Index");
}
return View(model);
}
当前代码的工作方式是忽略下拉列表,只填充我硬编码的值。有人会说我为什么要使用 view bag,这就是我所知道的。我根本不懂模型。如果这不能通过创建视图来完成,因为屏幕是空的,那么对我来说很酷 - 我只需要知道这一点。
这是我的代码,因为我放弃了尝试再次使用动态数据执行此操作的想法 MVC 说它是被禁止的。
如果我从创建控制器获取函数中删除它,页面将不会加载并且我得到空错误;
ViewBag.VehIssuesList = GetList(808);
我必须强制加载页面的值...这又是因为我试图在创建视图上执行此操作而 MVC 无法处理吗?
_WidgetListPartial @if 语句将处理空情况。如果局部视图的数据返回为空。
@if (@ViewBag.AList != null)
{
<table cellpadding="1" border="1">
<tr>
<th>
Widget Name
</th>
</tr>
@foreach (MvcProgramX.Models.LIST_FULL item in @ViewBag.AList)
{
<tr>
<td>
@item.WidgetName
</td>
</tr>
}
</table>
}