我对 asp.net 很陌生。通过尝试解决问题,我得到了这个错误:
System.InvalidOperationException was unhandled by user code
HResult=-2146233079 Message=Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. Source=System.Web.Mvc
StackTrace: at System.Web.Mvc.ModelMetadata.FromLambdaExpression[TParameter,TValue](Expression`1 expression, ViewDataDictionary`1 viewData, ModelMetadataProvider metadataProvider) at System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameForInternal[TModel,TValue](HtmlHelper`1 html, Expression`1 expression, ModelMetadataProvider metadataProvider) at System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor[TModel,TValue](HtmlHelper`1 html, Expression`1 expression) at ASP._Page_Views_Users_Index_cshtml.Execute() in c:\Index.cshtml:line 28 at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.StartPage.RunPage() at System.Web.WebPages.StartPage.ExecutePageHierarchy() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
InnerException:
主要思想,我想在我看来代表 2 个模块。所以我为这两个模块创建了单独的类L
public class TimeReportViewMod
{
public IEnumerable<TimeReportingLib.User> Model1 { get; set; }
public IPagedList<TimeReportingLib.User> Model2 { get; set; }
}
这是我返回 View 的 Controller :
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrWhiteSpace(sortOrder) ? "login_desc" : "";
var users = from s in db.Users.Include(u => u.CustomerProject).Include(u => u.Service).Include(u => u.Customer) select s;
//var sortUsers = from s in db.Users select s;
if(searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
if (!String.IsNullOrEmpty(searchString))
{
users = users.Where(s => s.Login.Contains(searchString) || s.UserName.Contains(searchString));
}
switch (sortOrder)
{
case "login_desc":
users = users.OrderByDescending(s => s.Login);
break;
default:
users = users.OrderBy(s => s.Login);
break;
}
int pageSize = 3;
int pageNumber = (page ?? 1);
return View("Index",new TimeReportViewMod());
}
这是我的 View ,我想在其中获取我的用户登录名的数据,但我遇到了那个异常:(
@model TimeReportingWebApp.TimeReportViewMod
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Users";
}
<h2>Users</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Users", FormMethod.Get))
{
<p>
Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" class="btn btn-primary" value="Search" />
</p>
}
<table class="table">
<tr>
<th>
@Html.ActionLink(Html.DisplayNameFor(m => m.Model1.Select(x => x.Login)).ToHtmlString(), "Index")
</th>
</tr>
@foreach (var item in Model.Model1) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Login)
</td>
</tr>
</table>
Page @(Model.Model2.PageCount < Model.Model2.PageNumber ? 0 : Model.Model2.PageNumber) of @Model.Model2.PageCount
如何使用 lambda 表达式访问我的数据?以及如何通过使用带有两个模块的类来正确访问这些数据?
最佳答案
好吧,我明白了主要问题是什么。 首先,我不需要在我的 ActionLink 中提供对象名称,因为我不会在任何地方使用。所以只要给它一个简单的字符串就足够了:
@Html.ActionLink("Login","Index", new { sortOrder = ViewBag.NameSortParm, currentFilter = ViewBag.CurrentFilter })
在那之后我发现我没有在我的 Controller 中创建我的类的实例:UsersController.cs。所以我声明:
var inst = new TimeReportViewMod();
inst.Model1 = users.ToList();
inst.Model2 = users.ToPagedList(pageNumber, pageSize);
return View("Index", inst);
现在我可以完全访问我 View 中的 2 个模块。
关于c# - 在 View : An exception of type 'System.InvalidOperationException' occurred in System. Web.Mvc.dll 中使用 2 个模块,但未在用户代码中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36468233/