![](/img/trans.png)
[英]NullReferenceException with Ckeditor 5 and ASP.NET MVC bundle error?
[英]Create error message in browser when NullReferenceException exception occurs in asp.net mvc
當拋出DbNullException
時,我想創建一條錯誤消息顯示在瀏覽器上。
當用戶輸入正確的MemberId
,將顯示正確的結果。 但是,當用戶輸入不正確的MemberId
,將引發NullReferenceException
。
查詢:
[HttpGet]
public ActionResult LoanSearch(string q)
{
if (q == null)
{
throw new Exception("Enter");
}
else
return PartialView(loans);
}
public List<Loan> GetLoans(string searchString)
{
var loan = db.Loans
.Where(a => a.ISBN.ToString().Contains(searchString) &&
a.Book.OnLoan == 1)
.OrderByDescending(a => a.LoanId)
.FirstOrDefault();
return new List<Loan> { loan };
}
我最初執行以下操作,但是會發生DbNullException
:
[HttpGet]
public ActionResult LoanSearch(string q, Member loanss)
{
var loans = GetLoans(q, loanss);
return PartialView(loans);
}
public List<Loan> GetLoans(string searchString, Member loanss)
{
loanss.errorM = "enter correct member id";
var loan = db.Members.Where(a => a.MemberId.ToString()
.Contains(searchString) &&
a.Book.OnLoan == 1)
.OrderByDescending(a => a.LoanId)
.FirstOrDefault();
if (loan != null)
{
return new List<Member> { loan };
}
else
{
return new List<Member> { loanss };
}
}
總之,我希望顯示一條錯誤消息,而不是引發an exception
錯誤,並且我不確定如何實現此消息。 謝謝你的時間
這是我的ajax:
div class="panel panel-default">
<div class="panel-heading">Please enter the ISBN Number of the book</div>
<div class="panel-body">
@using (Ajax.BeginForm("LoanSearch", "BookReturn",
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
OnFailure = "searchFailed",
LoadingElementId = "ajax-loader",
UpdateTargetId = "searchresult",
}))
{
<input type="text" name="q" />
<input type="submit" value="search" />
<img id="ajax-loader"
src="@Url.Content("~/Images/ajax-loader.gif")"
style = "display:none" />
}
<div id="searchresult"></div>
</div>
</div>
這是錯誤的所在:在局部視圖中-@ item.Member.Name:
foreach (var item in Model)
{
<div class="text-center">
<br />
<p>Member Name: @item.Member.Name</p>
<p>Book Title: @item.Book.Name</p>
<p>Book Author: @item.Book.Author</p>
<p>Checkout Date: @item.CheckOutDate</p>
<p>Return Date: @item.ReturnDate</p>
<br />
}
好吧,簡單地說,您可以將查詢包裝在try...catch
:
try
{
var loan = db.Members ...
}
catch (NullReferenceException)
{
ModelState.AddModelError("searchString", "Danger Will Robinson!");
}
但是,真正的問題是首先獲取此異常。 在這里向用戶返回錯誤的問題是用戶沒有做任何導致它的事情,並且無能為力以糾正它。 問題是MemberId
顯然是可以為空的,因此您應該在調用ToString()
之前進行檢查:
.Where(a => a.MemberId != null && a.MemberId.ToString().Contains(searchString) ...
UPDATE
您視圖中唯一可能導致異常的是: item.Member.Name
。 在ID不匹配的情況下, item.Member
為null,並且null沒有Name
屬性,因此是異常。 您可以通過執行null檢查來解決此問題:
@(item.Member != null ? item.Member.Name : null)
然后,如果item.Member
為null,則不會輸出任何內容。 否則,將輸出Name
屬性的值。 無論哪種方式,您都不會再遇到異常。
您需要捕獲nullerfernce異常並將操作重定向到錯誤消息視圖操作或在同一頁面狀態上顯示錯誤
[HttpGet]
public ActionResult LoanSearch(string q, Member loanss)
{
try
{
var loans = GetLoans(q, loanss);
return PartialView(loans);
}
catch(NullReferenceException)
{
return PartialView(ErrorPage);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.