我正在尝试学习如何在MVC3中使用Razor WebGrid.ajaxUpdateCallback参数如何工作?
我正在阅读并听到一些痛点,我想知道我是否应该走那条路.更不用说,我似乎无法找到任何权威文档(来自微软).如果你说我不应该使用它,你会建议什么途径?我正试图让一个新网站开始,但我想第一次就做好.
我的ASP.NET MVC3测试应用程序中有以下WebGrid.它显示了一个客户列表:
@grid.GetHtml(
tableStyle: "grid",
headerStyle: "head",
alternatingRowStyle: "alt",
columns: grid.Columns
(
grid.Column(format: (item) => Html.ActionLink("Edit", "Details", new { id = item.id })),
grid.Column("Address.CompanyName"),
grid.Column("Address.City")
)
)
Run Code Online (Sandbox Code Playgroud)
这里有趣的部分是我在第一列中添加的Edit-link.我想使用客户帐号而不是简单的"编辑"测试.但是,这给我带来了很多问题.
我试过了:
grid.Column(format: (item) => Html.ActionLink(item.AccountNumber.ToString(), "Details", new { id = item.id })),
Run Code Online (Sandbox Code Playgroud)
但是,似乎有一些我不明白这是如何工作的,因为我一直得到这个例外:
CS1502: The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么这不起作用?"编辑"和item.AccountNumber.ToString()(除了拼写)有什么区别?
我应该注意到链接在使用"编辑" - 文本时起作用,这AccountNumber很长.
我有一个网格,我没有使用剃刀syntex.Rather我使用的是.aspx表单.代码如下;
<%
var grid = new WebGrid(Model,defaultSort:"PublishDate",rowsPerPage:10);
%>
<%:
grid.GetHtml(
tableStyle: "wGrid",
headerStyle: "wGridHeader",
alternatingRowStyle: "alt",
columns: grid.Columns(
grid.Column("Title", canSort: false),
grid.Column("PublishDate", "Published on"),
grid.Column("CategoryName", "Category"),
grid.Column(format: (item) => Html.ActionLink("Details", "Browse", new { id = item.Title }))
)
)
%>
Run Code Online (Sandbox Code Playgroud)
现在我想将'PublishDate'列格式化为'dd-MMM-yyyy'.知道怎么做吗?
我搜索了文档(http://msdn.microsoft.com/en-us/library/system.web.helpers.webgrid.webgrid(v=vs.111).aspx),发现"canPage:false" - 哪个不起作用.说没有名为'canPage'的参数.
其他网站称'autoSortAndPage:false'有效,但它对我没用.
码:
<div id="grid">
@grid.Html(canPage: false,
// the rest of my grid stuff
);
</div>
Run Code Online (Sandbox Code Playgroud)
我该如何摆脱这种分页?
我的数据访问层返回带有单页行数和总行数的集合.
遗憾的是,WebGrid组件不允许指定总行数或总页数(这些属性是只读的).
以前有人不得不处理这个问题吗?
我已经实现了一个WebGrid.排序,分页和过滤不能一起使用.它们在您单独使用时起作用.当您将三者结合使用时,过滤不起作用.
症状:
过滤结果集,然后排序.
要么
过滤结果集,然后转到下一页.
在这两种情况下,过滤器都会丢失.但它确实是页面和排序.
在后面的代码中:当通过排序或分页调用action方法时,为每个过滤器参数显示null.
通过过滤器调用操作方法时,过滤器参数会通过.
这告诉我,当你开始排序或分页时,它没有提交表单.
public ActionResult MyPage(int? page, int? rowsPerPage,
string sort, string sortdir,
string orderNumber, string person, string product)
Run Code Online (Sandbox Code Playgroud)
我在SO和其他地方环顾四周.有很多例子和人们会问如何做一个或另一个或全部三个.但我只看到一个与我的问题,所以我在这里发布.(他也没有解决)
我的页面实现如下:
@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
{
<div class="right">
<select id="rowsPerPage" name="rowsPerPage">
<option>15</option>
<option>25</option>
<option>50</option>
<option>75</option>
<option>100</option>
</select>
</div>
<div class="table">
<div class="tableRow">
<div class="tableCell">
Order Number
</div>
<div class="tableCell">
Person
</div>
<div class="tableCell">
Product
</div>
</div>
<div …Run Code Online (Sandbox Code Playgroud) 我在asp.net mvc中尝试了几个网格.微软在mvc 3的预发布中也知道了一个网格,所以我想我会试试那个.
基本功能很容易实现,但是当涉及到排序时,我遇到了一些问题.网格通过URL处理其排序.在url中,您可以通过以下方式获得排序列和排序方向:?sortdir = ASC&sort = ABONNEMENT
现在您可以期望在对某列进行排序后,该列上的sortdir查询字符串将更改为?sortdir = DESC但它不会.它保持?sortdir = ASC.有人知道这是一个错误还是一个功能,以及如何解决这个问题?
另一个非常恼人的事情:如果我点击一个排序链接,就会完成一个httpget请求.因此,我放松了我的模型.因为页面上有可能过滤网格(搜索功能),所以我想在模型中保留它.在我看来,将这些数据置于模型状态,而不是将其存储在会话状态中,这将是一个更容易和更清晰的解决方案.是否可以更改排序标题链接的行为,以便执行http帖子?
对此有何想法或想法?Tnx的帮助.
格雷茨,科恩
视图的代码如下:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<table>
<tr>
<td>
<h1 class="normal">List of subscription</h1>
</td>
<td>
</td>
</tr>
</table>
<% using (Html.BeginForm("List", "Subscription", FormMethod.Post)) { %>
<table border="0" cellpadding="0" cellspacing="5">
<tr>
<td>
Search By
</td>
<td>
<%: Html.DropDownListFor(m => m.SearchByColumn, Ogone.FrontEnd.Web.Controllers.SubscriptionController.SubscriptionSearchList) %>
</td>
<td>
<%: Html.TextBoxFor(m => m.SearchByText) %>
</td>
<td>
<input name="button" type="submit" value="Search" />
</td>
</tr>
</table>
<div>
<%
var grid = new System.Web.Helpers.WebGrid(Model.SubscriptionList, …Run Code Online (Sandbox Code Playgroud) 我有一个Car类,我试图使用WebGrid助手在MVC 3视图中显示.下面是Car及其元数据类.
车类:
[MetadataType(typeof(CarMetadata))]
public partial class Car
{
// car implementation
}
Run Code Online (Sandbox Code Playgroud)
汽车元数据类:
public class CarMetadata
{
[DisplayName("Car Name")]
[StringLength(100, ErrorMessageResourceType = typeof(ValidationText), ErrorMessageResourceName="CarNameDescriptionLength")]
[Required]
public string CarName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
查看内容:
@model List<Car>
...
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 10);
grid.Pager(WebGridPagerModes.NextPrevious);
@grid.GetHtml(
htmlAttributes: new { id = "grid" },
columns: grid.Columns(
grid.Column("CarName", ?????)
));
Run Code Online (Sandbox Code Playgroud)
目标:我想弄清楚如何使用DisplayName数据注释作为WebGrid(?????)中的列标题文本.有谁知道这是如何实现的?
提前致谢!
我有一个webgrid,有一个列我想只对某些用户可见.目前我已按如下方式编码网格
if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator))
{
@grid.GetHtml(columns: grid.Columns(
grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })),
grid.Column("SignOffDate", "Sign Off Date",
format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
grid.Column("FullContractNumber", "Contract Number"),
grid.Column("ContractTitle", "Title")
));
}
else
{
@grid.GetHtml(columns: grid.Columns(
grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
grid.Column("SignOffDate", "Sign Off Date",
format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
grid.Column("FullContractNumber", "Contract Number"),
grid.Column("ContractTitle", "Title")
));
}
Run Code Online (Sandbox Code Playgroud)
但是肯定有更好的方法而不重复所有代码?2列输入之间的唯一区别是我想显示特定用户的编辑链接.那么这样做的最佳替代方式是什么?