“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
1
filters, Int32 filterIndex, ResultExecutingContext preContext,
ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
Filter, Int32 filterIndex, ResultExecutingContext preContext,
ControllerContext controllerContext, ActionResult actionResult) +420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext
controllerContext, IList1 filters, ActionResult actionResult) +52
1.CallEndDelegate(IAsyncResult
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
asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
1.CallEndDelegate(IAsyncResult
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
asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
1.CallEndDelegate(IAsyncResult
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
asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
1.CallEndDelegate(IAsyncResult
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
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Heilige Scheiße!
Wenn Sie jemals, jemals, jemals diesen Fehler bekommen, bitte denken Sie daran, es ist aber eine und nur eine Ursache für diesen Fehler.
Die Zeile meldet es eine Ausnahme bei können haben nichts zu tun mit der Ausnahme, und vielleicht eine Meile oder zwei Weg von den Schuldigen.
Suchen, suchen, suchen wie verrückt. 🙂
Das ist, wie ich gefunden, die Lösung und Befreiung von meinem Elend.
Url.Content
ist wohl selbst Schuld. Aber das ist die erste Antwort, die kommt, wenn ich die Suche, indem Sie die Ausnahme Nachricht, und mein Problem hat nichts zu tun mitUrl.Content
.