“Wert darf nicht null oder leer ist. Parameter name: contentPath" auf eine höchst unerwartete Linie auf Postbacks, wenn ModelState Fehler hat

Es wurde zwei Stunden lang wurde ich feilschen mit dieser Monstrosität.

Bekomme ich diesen Fehler:

Wert darf nicht null oder leer ist. Parameter name: contentPath

In dieser Zeile in meiner Ansicht:

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

Den stack-trace, die unten gegeben werden, scheint nahe zu legen, dass ein Aufruf Url.Content gemacht wurde, aber ich habe keinen solchen Anruf. Unten ist die Stapel-Ablaufverfolgung, und das ist gefolgt von einigen Zeilen mehr code um die Zeile die den Fehler verursacht:

[ArgumentException: Wert darf nicht null oder leer ist. Parameter name:
contentPath] - System.Web.Mvc.UrlHelper.GenerateContentUrl(String
contentPath, HttpContextBase httpContext) +125

System.Web.Mvc.UrlHelper.Inhalt(String contentPath) +26

ASP._Page_Views_Journal_EditIssue_cshtml.Execute() in
MyProject\Views\Journal\EditIssue.cshtml:45

System.Web.Webseiten.WebPageBase.ExecutePageHierarchy() +197

System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105

System.Web.Webseiten.StartPage.RunPage() +17

System.Web.Webseiten.StartPage.ExecutePageHierarchy() +64

System.Web.Webseiten.WebPageBase.ExecutePageHierarchy(WebPageContext
pageContext, TextWriter writer, WebPageRenderingBase startPage) +78

System.Web.Mvc.RazorView.RenderView(ViewContext viewContext,
TextWriter writer-Objekt-Instanz) +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(IList1
filters, Int32 filterIndex, ResultExecutingContext preContext,
ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1
Filter, 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.WrappedAsyncResult
1.CallEndDelegate(IAsyncResult
asyncResult) +10

System.Web.Mvc.Async.WrappedAsyncResultBase1.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.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.WrappedAsyncVoid
1.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__5(IAsyncResult
asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult
asyncResult) +29

System.Web.Mvc.Async.WrappedAsyncResultBase`1.Ende() +49

System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
+28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
Ergebnis) +9

System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+9644097 System.Web.HttpApplication.ExecuteStep(IExecutionStep Schritt, Boolean& completedSynchronously) +155

Den code-Zeilen rund um die Zeile, die die Ausnahme ausgelöst werden:

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

WICHTIG

Seltsam, dass die exception wird nur ausgelöst, wenn ich wieder von der post zurück-und nie, wenn ich laden Sie zunächst die Sicht, und auch dann nicht, wenn die ModelState hat keine Fehler. Es werden nur ausgelöst, wenn der ModelState Fehler hat nach einem post-back.

Hier finden Sie einige server-seitigen code, aber ich sehe keinen Grund, warum es sein könnte, etwas falsch zu machen:

[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);
}
  • dauerte eine Weile zu stoppen, eigentlich auf der Suche auf der Fehler Seite-Zeile rot hervorgehoben und tatsächlich Lesen Sie die Fehlermeldung auf die Spitze zu
Schreibe einen Kommentar