【发布时间】:2014-04-07 18:58:38
【问题描述】:
在我们的 ASP MVC 3 Intranet 站点上,我们有两个用于创建新代理的选项。基本方法是简单地通过标准的、开箱即用的Create 控制器。这里没有什么太花哨的。
第二种是克隆一个已经存在的代理。从控制器的索引中,用户可以选择一个“克隆”链接,该链接会将它们发送到名为CloneAgent 的不同方法(我们这样做是为了保持逻辑分离并且代码更清晰/更易于维护)。
两种方法都返回相同的Create 视图。在标准的Create 方法中,return 语句只是一个简单的
return View(modelObj)
在CloneAgent 方法中,return 语句并不复杂
return View("Create", modelObj)
当我在本地运行该站点时,AgentClone 工作正常,但是浏览器中的 URL 是这样的
http://localhost:2574/AgentTransmission/CloneAgent/0?agentId=%20%2011317710
当我在服务器上运行时,我得到了相同的 URL,但是我得到了我们的自定义错误消息之一,而不是页面加载。
有人可以为AgentClone 方法提供正确的return 语句吗?
更新:
忘了提 - 将AgentClone 方法的return 语句放在try 语句中。当我将代码放在服务器上时(在本地运行仍然可以正常运行),我没有看到错误消息,所以我不确定在哪里查找错误。
代理克隆
//GET
public ActionResult CloneAgent(int id, int agentId = 0)
{
//Tax ID info
ViewBag.FullSSN = Security.IsFullSsn(User);
AgentTransmission clone;
try
{
if (id == 0)
{
MonetToDssClient client = new MonetToDssClient();
CloneMessage msg = client.CloneRequest("1234678");
//TODO: make sure we are cloning appropriate fields
clone = AgentTransmission.MapObject(msg.AgentInformation);
EventLog.WriteEntry("Monet", "Clone complete", EventLogEntryType.Information);
}
else
{
//TODO: make sure this method still applicable to add all agents
clone = Clone(db.AgentTransmission.Find(id));
}
clone.FormattedReferenceNumber = ReferenceConversion.UnobAndFormat(clone.ReferenceNumber, "S");
clone.ReferenceNumber = ReferenceConversion.ObfuscateReference(clone.ReferenceNumber);
DisplayPrep();
clone.SetDropDowns();
EventLog.WriteEntry("Monet", "Heading back to Create", EventLogEntryType.Information);
return View("Create", clone);
}
catch (Exception ex)
{
EventLog.WriteEntry("Monet", ex.Message, EventLogEntryType.Warning);
string s = ex.Message;
throw;
}
}
MapObject模型对象方法
//Use AutoMapper plugin to convert from MonetToDss namespace
public static AgentTransmission MapObject(AgentClone source)
{
AgentTransmission destination = new AgentTransmission();
//Create mapp between namespace models
Mapper.CreateMap<AgentClone, AgentTransmission>();
//Map AgentClone to AgentTransmission
destination = Mapper.Map<AgentClone, AgentTransmission>(source);
return destination;
}
查看(仅标题)
@model Monet.Models.AgentTransmission
@{
ViewBag.Title = "Create new Agent";
}
第二次编辑
这是引发异常的堆栈跟踪。
System.InvalidOperationException
System.InvalidOperationException: The view '~/Views/AgentTransmission/Create' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/AgentTransmission/Create
at System.Web.Mvc.ViewResult.FindView(ControllerContext context)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass27.<>c__DisplayClass2c.<BeginInvokeAction>b__22()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass27.<BeginInvokeAction>b__24(IAsyncResult asyncResult)
thrown in AgentTransmission/CloneAgent
任何建议都将不胜感激,因为如下图所示,文件路径 Views/AgentTransmission/Create 存在(堆栈跟踪的底部显示此错误是在 AgentTransmission 控制器中引发的
【问题讨论】:
-
添加一个带有一些日志记录的异常过滤器并找出错误是什么。
-
modelObj 中是否存在“AgentId”?是不是modelObj模型绑定不好的情况?
-
@asawyer - 抱歉忘记在帖子中提及这一点。我将
return语句包装在try块中,没有看到抛出异常。我认为它正在寻找我们没有的AgentClone视图。 -
@Rikon - 是的,两个 modelObj 上都存在“AgentId”。它们都是同一类型。
-
这不是我的建议,尝试添加异常过滤器并在那里记录错误。
标签: c# .net asp.net-mvc-3 iis asp.net-mvc-routing