“值不能為空或為空。參數名稱:contentPath”在 ModelState 出現錯誤時回發時最意外的行
已經連續兩個小時了,我一直在和這個怪物討價還價。
我收到此錯誤:
值不能為 null 或空。參數名稱:contentPath
在我看來這一行:
@Html.ValidationMessageFor(model => model.IssueName, "", new { @class = "text-danger" })下面給出的堆棧跟踪似乎表明
Url.Content已經進行了呼叫,但我沒有進行這樣的呼叫。下面是堆棧跟踪,然後是導致錯誤的行周圍的更多程式碼行:$$ ArgumentException: Value cannot be null or empty. Parameter name: contentPath $$ System.Web.Mvc.UrlHelper.GenerateContentUrl(String contentPath, HttpContextBase httpContext) +125
System.Web.Mvc.UrlHelper.Content(String contentPath) +26
ASP._Page_Views_Journal_EditIssue_cshtml.Execute() 在 MyProject\Views\Journal\EditIssue.cshtml :45
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105
System.Web.WebPages.StartPage.RunPage() +17
System.Web.WebPages.StartPage.ExecutePageHierarchy () +64
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +256
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + 13
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList 1 過濾器, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1 filters, ActionResult actionResult) +52System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult
1.End() +49System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase 1.CallEndDelegate(IAsyncResult asyncResult) +22 System.Web.Mvc.Async.WrappedAsyncResultBase 1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc .Async.WrappedAsyncResultBase
1.End() +49 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 結果) +9 System. Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9644097 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +1551.End() +49System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid
1.End() +49System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid`
引發異常的行周圍的程式碼行是:
<div class="form-group"> @Html.LabelFor(model => model.IssueName, htmlAttributes: new { @class = "control-label col-md-2"}) <div class="col-md-10"> @Html.EditorFor(model => model.IssueName, new { htmlAttributes = new { @class = "form-control", id = "IssueName" } }) @Html.ValidationMessageFor(model => model.IssueName, "", new { @class = "text-danger" }) </div> </div>重要的
奇怪的是,只有當我從 post-back 回來時才會引發異常,而不是在我第一次載入視圖時引發異常,即使
ModelState沒有錯誤也不會引發。只有在ModelState回發後出現錯誤時才會引發它。這是一些伺服器端程式碼,但我看不出它可能做錯了什麼的任何原因:
[HttpPost] public async Task<ActionResult> EditIssue(EditIssueViewModel viewModel) { viewModel.AvailableTags = BusinessManager.GetAllTags(); if (viewModel.IssuePDFFile == null || viewModel.IssuePDFFile.ContentLength == 0) { ModelState.AddModelError("", "Please select a file to upload."); return View(viewModel); } var fileInfo = new FileInfo(viewModel.IssuePDFFile.FileName); if (!StaticData.AcceptedContentTypes.Contains(viewModel.IssuePDFFile.ContentType, StringComparer.InvariantCultureIgnoreCase) || !fileInfo.Extension.Equals(".pdf", StringComparison.InvariantCultureIgnoreCase)) { ModelState.AddModelError("", "You can only select a PDF file."); return View(viewModel); } if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(v => v.Errors) .Select(e => new { e.ErrorMessage, e.Exception }); var errorList = errors.ToList(); errorList.ForEach(e => Debug.Print(e.ErrorMessage)); errorList.ForEach(e => ModelState.AddModelError("", e.ErrorMessage)); return View(viewModel); } var operationResult = await BusinessManager.EditIssueAsync(viewModel); if (!operationResult.Succeeded) { ModelState.AddModelError("", operationResult.FailureMessage); return View(viewModel); } viewModel = (EditIssueViewModel)BusinessManager.GetIssueWithRelationships(viewModel.IssueId); viewModel.SuccessMessage = operationResult.SuccessMessage; return View(viewModel); }
碉堡了!
如果您曾經遇到此錯誤,請記住,此錯誤的原因只有一個,而且只有一個。
在視圖中的線網路中的某處,您已將空值傳遞給 @Url.Content 方法。時期。
它報告異常所在的行可能與異常無關,並且可能距離罪魁禍首一英里或兩英里。
搜尋,搜尋,瘋狂搜尋。:-)
這就是我如何找到解決這個問題並從痛苦中解脫出來的方法。