此问题被标记为与另一篇文章重复。该帖子专门且详细地解决了“ NullReference”异常。它提供了很多专门针对NullReference错误的可能原因的信息。
我的问题并非特定于NullReference错误。我的问题是“如何根据选定的下拉框项目过滤结果”。当然,在我反复试验的过程中-我遇到了NullReference错误,该错误在此处出现。但这不是我的问题的基础。我正在尝试做一个特定的功能,其他人也可能会觉得有用。 (1)可能会有更好的方法实现我的目标-也许有人会分享。 (2)我们可能会解决NullReference错误,只是发现更多弹出的错误。因此,此帖子不是特定于NullReference错误,而是特定于完成基于所选下拉项的“筛选结果”工作。 NullReference只是尝试实现真正问题的目标过程中的错误之一。因此,我不认为这是重复的。但是,很好。
如何根据从下拉框中选择的内容过滤结果?我正在使用MVC5,C#和javascript。
我在网上发现了(我认为是)一个很好的例子,并对其进行了修改以供自己测试。这是我到目前为止所拥有的
索引控制器:
public ViewResult Index()
{
var countries = new SelectList(
db.ICS_Units.Select(r => r.DeliveryUnit).Distinct().ToList());
ViewBag.Countries = countries;
return View();
}
索引视图
@model IEnumerable<ICS20web.Models.ICS_Order_History>
@{
ViewBag.Title = "Index";
}
<fieldset>
<h2>Index</h2>
<div>
@Html.DropDownList("Countries", "select a Unit")
</div>
@{
Html.RenderPartial("OrderHistoryPartial", ViewData.Model);
}
<br />
<div id="target">
</div>
<div id="log">
</div>
</fieldset>
JavaScript已添加到索引视图:
@Scripts.Render("~/Scripts/jquery-1.10.2.min.js")
<script type="text/javascript">
$(document).ready(function () {
$("#testList").change(function () {
$("#log").ajaxError(function (event, jqxhr, settings, exception) {
alert(exception);
});
var countrySelected = $("select option:selected").first().text();
$.get('@Url.Action("OrderHistoryPartial")',
{ id: countrySelected }, function (data) {
$("#target").html(data);
});
});
});
</script>
部分视图(OrderHistoryPartial):
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.DeliveryUnitID)
</th>
<th>
@Html.DisplayNameFor(model => model.LoginID)
</th>
<th>
@Html.DisplayNameFor(model => model.SuppliesID)
</th>
<th>
@Html.DisplayNameFor(model => model.OrderDate)
</th>
<th>
@Html.DisplayNameFor(model => model.ExpectedMonth)
</th>
<th>
@Html.DisplayNameFor(model => model.ExpectedYear)
</th>
<th>
@Html.DisplayNameFor(model => model.OrderedBy)
</th>
<th>
@Html.DisplayNameFor(model => model.OrderAmount)
</th>
<th>
@Html.DisplayNameFor(model => model.Measure)
</th>
<th>
@Html.DisplayNameFor(model => model.CurrentStatus)
</th>
<th>
@Html.DisplayNameFor(model => model.CurrentStatusDate)
</th>
<th>
@Html.DisplayNameFor(model => model.EmergencyOrder)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.DeliveryUnitID)
</td>
<td>
@Html.DisplayFor(modelItem => item.LoginID)
</td>
<td>
@Html.DisplayFor(modelItem => item.SuppliesID)
</td>
<td>
@Html.DisplayFor(modelItem => item.OrderDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.ExpectedMonth)
</td>
<td>
@Html.DisplayFor(modelItem => item.ExpectedYear)
</td>
<td>
@Html.DisplayFor(modelItem => item.OrderedBy)
</td>
<td>
@Html.DisplayFor(modelItem => item.OrderAmount)
</td>
<td>
@Html.DisplayFor(modelItem => item.Measure)
</td>
<td>
@Html.DisplayFor(modelItem => item.CurrentStatus)
</td>
<td>
@Html.DisplayFor(modelItem => item.CurrentStatusDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.EmergencyOrder)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.OrderID }) |
@Html.ActionLink("Details", "Details", new { id = item.OrderID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.OrderID })
</td>
</tr>
}
</table>
OrderHistoryPartial控制器:
public PartialViewResult OrderHistoryPartial(int id)
{
return PartialView(
db.ICS_Order_History.Where(r => r.DeliveryUnitID == id).OrderByDescending(r => r.OrderDate)
.ToList());
}
我认为我已经很接近解决这个问题了,但是我已尽我所能,无需寻求帮助。
当前,出现以下错误:
对象引用未设置为对象的实例。描述: 当前执行期间发生未处理的异常 网络请求。请查看堆栈跟踪以获取有关的更多信息 错误及其在代码中的起源。
异常详细信息:System.NullReferenceException:对象引用 没有设置为对象的实例。
源错误:
第43行:第44行:第45行:@foreach(模型中的变量项) 第46行:{第47行:
我今天早些时候问了这个问题,但是我删除了该帖子,因为我认为这更有条理,并提供了更详细的信息。
答案 0 :(得分:0)
您正在传入部分视图ViewData.Model,该视图为null,因为您正在调用不带参数的视图。两种可能的修复方法是