如何使用不同类型的ASP.NET MVC访问View中的字段

给出以下代码

行动方法

// Action for A
public ActionResult New(Ticket t, int knownLocation, string location) { ... }

// Action for B
public ActionResult Edit(Log log, int id, string assignTo, int knownLocation, string location) { ... }

查看

// Ticket.ascx
<%= Html.EditorFor(t => t.KnownLocation);

// A
<%@ Inherits="System.Web.Mvc.ViewPage<Models.Ticket>" %>
<%= Html.EditorForModel() %>

// B
<%@ Inherits="System.Web.Mvc.ViewPage<Models.Log>" %>
<%= Html.EditorFor(l => l.Ticket) %>

模型

class Log
{
   ...
   Ticket Ticket { get; set; }
   string Message { get; set; }
   ...
}
class Ticket
{
   ...
   Importance Importance { get; set; }
   string Name { get; set; }

   // Please note the protected access level
   Location KnownLocation { get; protected set; }
   string Location { get; protected set; }

   ...
}

在新(“A”)中, knownLocation正常工作。 在编辑(“B”)中, knownLocation抛出一个异常(在幕后):

参数字典为方法System.Web.Mvc.ActionResult Edit(TechHelp.Core.Models.Log,Int32,System.String,Int32,System.Int32)包含非空的类型'System.Int32'的参数'knownLocation' System.String)'在'TechHelp.Mvc.Controllers.TicketsController'中。 可选参数必须是引用类型,可为空类型,或者声明为可选参数。

我如何访问该字段? 请注意,它无法绑定到模型的属性。


如果您查看正在创建的html,则应该看到正在创建的输入的名称在每种情况下都不相同。

如果你真的想直接从POST中获得结果,那么你需要确保你的int knownLocation与第二种情况下创建的输入的名称相匹配(我怀疑它是Ticket_KnownLocation,但我也怀疑你'重新使用MVC 2预览版本,所以它可能会有所不同)。

无论如何,我想说你可能不想将知名度直接从POST中拉出来。 如果控制器需要访问它,我真的建议在Model上公开它,并让ModelBinding框架为你做好工作。 然后您可以使用log.Ticket.KnownLocation访问它。

链接地址: http://www.djcxy.com/p/39205.html

上一篇: How to access fields in View with different type ASP.NET MVC

下一篇: How can I return 500 error in JSON format in ASP.NET MVC?