Asp.net

“值不能為空或為空。參數名稱:contentPath”在 ModelState 出現錯誤時回發時最意外的行

  • August 18, 2019

已經連續兩個小時了,我一直在和這個怪物討價還價。

我收到此錯誤:

值不能為 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) +52

System.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() +49

System.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.WrappedAsyncResultBase1.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() +49

System.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() +49

System.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`

引發異常的行周圍的程式碼行是:

&lt;div class="form-group"&gt;
   @Html.LabelFor(model =&gt; model.IssueName, htmlAttributes: new { @class = "control-label col-md-2"})
   &lt;div class="col-md-10"&gt;
       @Html.EditorFor(model =&gt; model.IssueName, new { htmlAttributes = new { @class = "form-control", id = "IssueName" } })
       @Html.ValidationMessageFor(model =&gt; model.IssueName, "", new { @class = "text-danger" })
   &lt;/div&gt;
&lt;/div&gt;

重要的

奇怪的是,只有當我從 post-back 回來時才會引發異常,而不是在我第一次載入視圖時引發異常,即使ModelState沒有錯誤也不會引發。只有在ModelState回發後出現錯誤時才會引發它。

這是一些伺服器端程式碼,但我看不出它可能做錯了什麼的任何原因:

[HttpPost]
public async Task&lt;ActionResult&gt; 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 =&gt; v.Errors)
           .Select(e =&gt; new { e.ErrorMessage, e.Exception });

       var errorList = errors.ToList();

       errorList.ForEach(e =&gt; Debug.Print(e.ErrorMessage));
       errorList.ForEach(e =&gt; 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 方法。時期。

它報告異常所在的行可能與異常無關,並且可能距離罪魁禍首一英里或兩英里。

搜尋,搜尋,瘋狂搜尋。:-)

這就是我如何找到解決這個問題並從痛苦中解脫出來的方法。

引用自:https://stackoverflow.com/questions/38231453