【发布时间】:2020-08-30 11:29:52
【问题描述】:
编辑:我浏览了 StackOverflow 和各种网站上发布的许多解决方案,然后提出了下面的编译解决方案。随着初始查询的解决,我还更改了问题的标题。
我正在构建一个 Web 应用程序,其目标是根据主视图中的下拉列表更新模型,并在部分视图中显示模型中的数据表。为了更清晰地描绘场景,我在下面发布代码:
型号代码
public class Reports
{
public DataTable dt2 { get; set; }
public void setdt2defvalue()
{
Relativity.API.IDBContext eddsDBContext = Relativity.CustomPages.ConnectionHelper.Helper().GetDBContext(-1);
string defaultvalue = "Select '' as [Test]";
dt2 = eddsDBContext.ExecuteSqlStatementAsDataTable(defaultvalue);
}
引用的 DBcontext 用于第三方应用程序
控制器代码
[HttpPost]
public ActionResult ReviewerDashboardModel(int reviewerid)
{
Reports rev = new Reports();
try
{
Relativity.API.IDBContext eddsDBContext = Relativity.CustomPages.ConnectionHelper.Helper().GetDBContext(-1);
String sqlrev = "Select '" + reviewerid + "' as [Test]";
rev.dt2 = eddsDBContext.ExecuteSqlStatementAsDataTable(sqlrev);
}
catch (Exception ex)
{
}
return PartialView(rev);
}
public ActionResult Index4()
{
return View();
}
主视图 (Index4.cshtml)
@model Reports
@using System.Data
@using ReviewerTest.Models;
@{
Layout = null;
}
<!DOCTYPE html>
<html lang="en">
<body>
<div class="container">
<div class="col-md-6 col-md-offset-3">
<select id="reviewer">
<option value="1">option1</option>
<option value="2">option2</option>
<option value="3">option3</option>
</select>
<div style="margin-top:50px">
Result:
<div id="partialplaceholder">
@Html.Partial("ReviewerDashboardModel")
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(function() {
$('#reviewer').change(function () {
var url = "@Url.Action("ReviewerDashboardModel")";
var reviewerid = $(this).val();
if (reviewerid) {
reviewerid = reviewerid;
}
else {
reviewerid = 1;
}
$.post(url, { reviewerid: reviewerid }, function (data) {
$("#partialplaceholder").html(data);
});
});
});
</script>
<!-- JS includes -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>
</body>
</html>
部分视图(ReviewerDashboardModel.cshtml)
@model Reports
@using ReviewerTest.Models;
@using System.Data
<div class=" row">
if (Model.dt2 != null)
@{
<table id="ReviewerView" style="margin-left:13px; margin-right:13px; overflow-y:auto">
<thead style="background-color:lightgrey">
<tr>
@foreach (System.Data.DataColumn col in Model.dt2.Columns)
{
<th>@col.Caption</th>
}
</tr>
</thead>
<tbody>
@foreach (System.Data.DataRow row in Model.dt2.Rows)
{
<tr>
@foreach (var cell in row.ItemArray)
{
if (cell != null)
{
<td>@cell.ToString()</td>
}
else
{
<td></td>
}
}
</tr>
}
</tbody>
</table>
}
else
{
<table style="margin-left:13px; margin-right:13px; overflow-y:auto">
<tr>
<th>Revier Name</th>
</tr>
<tr>
<td>Select the reviewer from the dropdown</td>
</tr>
</table>
}
</div>
首先,对于在这里轰炸过多的代码,我深表歉意,但我希望它具有过度包容性,以便我可以消除其中的所有故障点。
此应用程序的主要目的是返回一个包含数据表的模型,并且数据表应根据用户在主视图下拉菜单中的选择进行更新。我正在使用局部视图来显示该表。
我目前面临的错误是部分视图给我一个错误说明
System.NullReferenceException:对象引用未设置为对象的实例。
局部视图中的这一行
if (Model.dt2 != null)
我真的很困惑,因为如果数据表是否为空,这正是条件应该评估的内容。我无法解决这个问题,并且非常感谢任何形式的帮助。另外,欢迎对代码提出任何建议,因为我是 .net 开发领域的初学者。
注意:我还尝试在 ajax 查询中使用 get 运算符而不是 post 运算符来测试它。使用 get,没有遇到此错误,并且正在显示局部视图的 else 部分。
【问题讨论】:
-
如果您在该行得到它,那么
Model就是null(您无法访问属性 -dt2-null对象)。 -
这是 C# stackoverflow 上最常见的问题:What is a NullReferenceException, and how do I fix it?
-
@John 非常感谢,这对我解决空异常错误很有帮助。我现在面临电话后问题,因为视图没有在下拉更改时更新。非常感谢您在这方面的任何帮助。
标签: c# html jquery ajax asp.net-mvc