在IIS中部署mvc2应用程序时出错

时间:2011-01-28 19:13:25

标签: .net asp.net-mvc-2 iis web-applications deployment

我们正在IIS上的浮动Internet的生产环境中部署基于MVC2的应用程序。发生错误,这是提高它的过程:

  1. 用户点击链接以显示网络表单
  2. 用户插入数据。
  3. 用户提交表单。
  4. 该应用程序显示错误。其跟踪显示对象的引用未设置为实例。显然,MVC的引擎丢失了关于模型的HTTP POST请求数据,因此系统在动作执行中的未指定时间为动作的参数分配空值。
  5. 在测试环境中,在我们的Intranet上,这个问题从未发生过。

    这是错误:

    // Error
    Exception Error: Object reference not set to an instance of an object.
    Exception Source: MagaARPIU
    Exception Data: System.Collections.ListDictionaryInternal
    Exception Trace: at MagaARPIU.Areas.GestionComercial.Controllers
        .ProspectacionController.IngresarEmpresa(InfoEmpresa modelo) 
    in C:\Desarrollo\calvarez\codigo\Gacela ARP - Publicaciones\Gacela ARP\Maga\MagaARPIU\Areas\GestionComercial\Controllers\ProspectacionController.cs:line 151 
    at lambda_method(Closure , ControllerBase , Object[] ) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker
        .InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
    
    // -- ProspectacionController.cs
    
    105        [RolAuthorizationAttribute]
    106        public ActionResult IngresarEmpresa()
    107        {
    108            var modelo = new InfoEmpresa();
                    ...
    113            modelo.DatosIdentificacion = new DatosIdentificacion();
                    ...
    137            return View("IngresarEmpresa1", modelo);
                    ...
    139         }
    
    145        [HttpPost]
    146        [RolAuthorizationAttribute]
    147        public ActionResult IngresarEmpresa(InfoEmpresa modelo)
    148        {
                    ...
    151            if (!modelo.DatosIdentificacion.Completo)
    152            {
                    ...
    179            }
                    ...
    305        }
    

    你知道发生了什么以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,很难说明您的模型在POST操作中为空的原因。我只是想知道为什么你的代码看起来不像这样:

[HttpPost]
[RolAuthorizationAttribute]
public ActionResult IngresarEmpresa(InfoEmpresa modelo)
{
    if (ModelState.IsValid)
    {
        // The validation failed => redisplay the view so that the user
        // can fix the errors:
        return View(modelo);
    }
    // at this stage validation passed => do something with the model
    ...
}

就调试您的问题而言,您可能希望在控制器操作中添加一些日志记录,这将跟踪发送的请求参数并查看缺少的内容。