首页 文章

“值不能为空或空 . 当ModelState出错时,返回时最意外的行上的参数名称:contentPath“

提问于
浏览
4

我已经连续两个小时跟这个怪物讨价还价了 .

我收到此错误:

值不能为null或为空 . 参数名称:contentPath

在我看来这一行:

@Html.ValidationMessageFor(model => model.IssueName, 
  "", new { @class = "text-danger" })

下面给出的堆栈跟踪似乎表明已经对 Url.Content 进行了调用,但我没有进行此类调用 . 下面是堆栈跟踪,然后是该行周围的一些代码行导致错误:

[ArgumentException:Value不能为null或为空 . 参数名称:contentPath] System.Web.Mvc.UrlHelper.GenerateContentUrl(String contentPath,HttpContextBase httpContext)125 System.Web.Mvc.UrlHelper.Content(String contentPath)26 MyProject \ Views \ Journal \中的ASP._Page_Views_Journal_EditIssue_cshtml.Execute() 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 controllerContex t,ActionResult actionResult)13 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1过滤器,Int32 filterIndex,ResultExecutingContext preContext,ControllerContext controllerContext,ActionResult actionResult)56 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1过滤器,Int32 filterIndex,ResultExecutingContext preContext ,ControllerContext controllerContext,ActionResult actionResult)420 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList1 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.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult)10 System.Web.Mvc.Async.WrappedAsyncResultBase1.End()49系统 . Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult的asyncResult)27 System.Web.Mvc.Controller . <BeginExecuteCore> b__1d(IAsyncResult asyncResult,ExecuteCoreState innerState)13 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult)29 System.Web.Mvc.Async.WrappedAsyncResultBase1.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.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult) asyncResult)22 System.Web.Mvc.Async.WrappedAsyncResultBase1.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 __(IAsyncResult asyncResult,ProcessRequestState innerState)21 System.Web.Mvc.Async.WrappedAsyncVoid1.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 result)9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute ()9644097 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)155

抛出异常的行周围的代码行是:

<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>

IMPORTANT

奇怪的是,只有当我从回发后回来时才会引发异常,从来没有在我第一次加载视图时,甚至在 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);
}

1 回答

  • 33

    哇靠!

    如果您曾经有过这样的错误,请记住,只有一个,而且只有一个导致此错误 .

    在视图的行网络中的某个位置,您已将空值传递给@ Url.Content方法 . 期 .

    它报告异常的行可能与异常无关,可能距离罪魁祸首一两英里 .

    搜索,搜索,搜索疯狂 . :-)

    这就是我找到解决方案的方法,并减轻了我的痛苦 .

相关问题