如何使用不同类型的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?