«El valor no puede ser nulo o vacío. Nombre de parámetro: parámetro contentPath» en un más inesperados de la línea en la devolución de datos cuando ModelState tiene errores

Ya han pasado dos horas seguidas me han regateo con esta monstruosidad.

Me sale este error:

Valor no puede ser nulo o vacío. Nombre de parámetro: parámetro contentPath

En esta línea, en mi opinión:

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

El seguimiento de pila de la dada de abajo parece sugerir que una llamada a Url.Content se ha hecho, pero yo no han hecho tal llamada. A continuación es la traza de la pila y que es seguido por algunos de líneas de código alrededor de la línea que causa el error:

[ArgumentException: Valor no puede ser nulo o vacío. Nombre de parámetro:
contentPath] del Sistema.Web.Mvc.UrlHelper.GenerateContentUrl(String
contentPath, HttpContextBase httpContext) +125

Sistema.Web.Mvc.UrlHelper.Contenido(Cadena contentPath) +26

ASP._Page_Views_Journal_EditIssue_cshtml.Execute() en
Miproyecto\Views\Journal\EditIssue.cshtml:45

Sistema.Web.Las páginas web.WebPageBase.ExecutePageHierarchy() +197

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

Sistema.Web.Las páginas web.La página de inicio.RunPage() +17

Sistema.Web.Las páginas web.La página de inicio.ExecutePageHierarchy() +64

Sistema.Web.Las páginas web.WebPageBase.ExecutePageHierarchy(WebPageContext
pageContext, TextWriter escritor, WebPageRenderingBase startPage) +78

Sistema.Web.Mvc.RazorView.RenderView(ViewContext viewContext,
TextWriter escritor, instancia de Objeto) +256

Sistema.Web.Mvc.BuildManagerCompiledView.Render(ViewContext
viewContext, TextWriter escritor) +107

Sistema.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext contexto)
+291 Sistema.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext
controllerContext, ActionResult actionResult) +13

Sistema.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1
filters, Int32 filterIndex, ResultExecutingContext preContext,
ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1
filtros, Int32 filterIndex, ResultExecutingContext preContext,
ControllerContext controllerContext, ActionResult actionResult) +420

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

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

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

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

Sistema.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49

Sistema.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
+28 Sistema.Web.Mvc.MvcHandler.Sistema.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
resultado) +9

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

Las líneas de código alrededor de la línea que produce la excepción son:

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

IMPORTANTE

Extrañamente, la excepción se produce sólo cuando vuelvo de un post nuevo y nunca cuando me cargue primero la vista, y ni siquiera cuando el ModelState no tiene errores. Sólo se produce cuando el ModelState tiene errores después de un post-back.

Aquí es algunos de código del lado del servidor, aunque no veo ninguna razón por qué podría estar haciendo algo mal:

[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);
}
  • me tomó un tiempo para detener una búsqueda en la página de error de la línea resaltada en rojo y leyó el mensaje de error en la parte superior también

1 Kommentar

  1. 42

    Holy crap!

    Si usted nunca, nunca, nunca este error, por favor, recuerde, no hay sino uno, y sólo uno, la causa de este error.

    En algún lugar en la red de líneas en su punto de vista, de haber superado un null
    valor a la @Url.El contenido de método. Período.

    La línea que se informa de una excepción a puede no tener nada que ver con la excepción de que pueden ser una o dos millas de distancia de la culpable.

    Buscar, buscar, buscar como un loco. 🙂

    Que es como he encontrado la solución a este y socorro de mi miseria.

    • Si usted recibe una similar seguimiento de la pila, entonces Url.Content es probablemente la culpa. Pero esta es la primera respuesta que viene cuando busco por el mensaje de excepción y mi problema no tiene nada que ver con Url.Content.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea