ASP.NET MVC 中的嵌套服务器端块?
最近,我一直在努力解决 ASP.NET MVC 上的一个恼人的情况。 这是简短的故事,
我应该有一个列出所有产品的视图; 现在因为这些产品太多了,我正在分页它们(非常有创意嘿!)。 该页面包含两个分页箭头 -“下 10 个产品”、“和前 10 个产品”。 该视图将传递一个 IEnumerable
集合,其中包含要显示的产品列表。 该视图还传递两个整数(currentPage、totalPages)作为 ViewData 项。 现在我需要完成的是检查它是否是第一页(ViewData["CurrentPage"] == 0)我应该将“前10页”链接的css类更改为禁用,所以我想出了类似的东西以下
<a href="/Products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])-1)%>/"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 1 ? "bgn disabled" : ""%>">
previous 10 products
</a>
这工作正常,但仍然有问题。 尽管链接已禁用或特别变灰,但它仍然指向有效的 URL,因此我尝试根据 CurrentPage 变量实际更改链接的 href 属性。 下面是代码的样子(准备好迎接纯粹的丑陋):
<a href="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"javascript:void[]" :
"/products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])+1)%>/" %>"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"bgn disabled" :
""%>">
previous 10 products
</a>
现在,我对这段代码的问题是:
- 第二个语句不起作用,显然是因为嵌套的服务器端
- 脚本非常丑陋,而且绝对不可读(想象一下我对每个需要分页的页面都这样做!但痛苦)。 :(
大家还有更好的选择吗?
Lately, I'v been struggling with an annoying situation on ASP.NET MVC. Here's the story in short,
I'm supposed to have a view that lists all of the products; now because those products are too many, I'm paging them (very innovative heh!). The page contains two paging arrows -"Next 10 products", "and previous 10 products". The view is passed a IEnumerable<Product>
collection containing the list of products to be displayed. The view is also passed two integers (currentPage, totalPages) as ViewData items. Now what I need to accomplish is to check if it's the first page (ViewData["CurrentPage"] == 0) I should change the css class of the "previous 10 pages" link to disabled, so I came up with something like the following
<a href="/Products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])-1)%>/"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 1 ? "bgn disabled" : ""%>">
previous 10 products
</a>
This worked fine, still there's a problem. Though the link is disabled, or specifically grayed, it still points to a valid URL, so I tried to actually change the href attribute of the link based on the CurrentPage variable. Here's how the code looks like (get ready to the pure ugliness):
<a href="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"javascript:void[]" :
"/products/Page<%=Html.Encode(Convert.ToInt32(ViewData["CurrentPage"])+1)%>/" %>"
class="<%=Convert.ToInt32(ViewData["CurrentPage"]) <= 0 ?
"bgn disabled" :
""%>">
previous 10 products
</a>
Now, my problems with this code are:
- The second statement doesn't work, apparently because of the nested server side scripts
- It's very ugly, and absolutely unreadable (imagine I'm doing this with each page that requires paging! pain in the but). :(
Any better alternatives guys?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用
if
语句:顺便说一句,如果您要对一组页面执行此操作,则可以将其封装在
ViewUserControl
或ViewMasterPage 中
。You can use an
if
statement:By the way, if you're doing this for a set of pages, you can encapsulate it in a
ViewUserControl
or aViewMasterPage
.这是另一个解决方案。 添加
:
然后更改您的标记:
Here is another solution. Add
<script runat="server">
:And then change your markup:
您可以尝试我的寻呼机 HTML 帮助器:
如何使用:
控制器实现如下所示:
最后输出:
(来源:clip2net.com)
You can try my pager HTML helper:
How to use:
And Controller implementation looks like this:
And finally output:
(source: clip2net.com)