【发布时间】:2015-05-22 20:31:47
【问题描述】:
下面是View中出现错误的简化代码:
型号:
public class Employee
{
public string EmployeeID{ get; set; }
public string Name { get; set; }
...
}
控制器:
public ActionResult Index()
{
var model = selectAllEmployees();
ViewBag.ITDept = model.Where(a => a.departmentID == 4);
ViewBag.Officer = model.Where(a => a.departmentID == 5);
return View(model);
}
查看:
@model IList<EnrolSys.Models.Employee>
@{
Layout = null;
}
@using (Html.BeginForm("Save", "EmployMaster"))
{
for (int i = 0; i < ViewBag.ITDept.Count(); i++)
{
//Here's the error occurs
@Html.Partial("EmployeeDisplayControl", ViewBag.ITDept[i])
}
<br />
}
@Html.Partial("EmployeeDisplayControl", ViewBag.ITDept[i])这行有一个异常:
'System.Web.Mvc.HtmlHelper>' 没有名为“Partial”的适用方法,但似乎有一个 该名称的扩展方法。扩展方法不能动态 派出。考虑强制转换动态参数或调用 没有扩展方法语法的扩展方法。
我猜是说我不能在动态表达式中使用扩展方法,有什么解决方法吗??
我为这个错误做了一个小提琴: https://dotnetfiddle.net/ekDH06
【问题讨论】:
-
试试
System.Web.Mvc.HtmlHelper.Partial(@Html, "EmployeeDisplayControl", ViewBag.ITDept[i]); -
或者干脆
@Html.Partial("EmployeeDisplayControl", (object)ViewBag.ITDept[i]) -
在这种情况下您对
@Html.Partial()的使用将不起作用(顺便说一句,您链接到我的答案),因为部分不会生成正确的名称属性 -
您需要从包含两个属性
List<Employee> ITDeptEmployees和List<Employee> OfficerEmployees的视图模型开始,然后在每个集合上使用for循环(使用@Html.TextBoxFor(m => m[i].Name)或使用自定义EditorTemplate -
@User2012384,Alex Art 的回答也是正确的,所以你应该接受那个。
标签: c# asp.net-mvc asp.net-mvc-4