小编Ter*_*rry的帖子

ASP.Net MVC 3 Razor Response.Write位置

我正在尝试更新关于将Facebook BigPipe实施到剃须刀的教程.

有一个html助手扩展,它将一个pagelet添加到列表中,然后将一个保持div输出到响应中.我的想法是,稍后将此pagelet的内容呈现为字符串,然后通过javascript注入此持有div.

public static void RegisterPagelet(this HtmlHelper helper, Pagelet pagelet) {
    var context = helper.ViewContext.HttpContext;
    List<Pagelet> pagelets = (List<Pagelet>)context.Items["Pagelets"];
    if (pagelets == null) {
        pagelets = new List<Pagelet>();
        context.Items["Pagelets"] = pagelets;
    }
    pagelets.Add(pagelet);
    context.Response.Write("<div id=\"" + pagelet.Container + "\"></div>");
}
Run Code Online (Sandbox Code Playgroud)

在示例中,此函数的调用方式如下:

<div id="textHolder">
    <% Html.RegisterPagelet(myPagelet); %>
</div>
Run Code Online (Sandbox Code Playgroud)

这会将小页面添加到列表中,并将保留div输出到响应流.

所以

<div id="textHolder">
    <div id="pageletPlaceHolder"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,当我在Razor中尝试相同时:

<div id="textHolder">
    @{ Html.RegisterPagelet(myPagelet);  }
</div>
Run Code Online (Sandbox Code Playgroud)

div占位符显示在bodyHolder div之外的正文顶部.为什么是这样?我怎样才能使这个行为像在div中输出响应的webforms视图?

谢谢.

c# response.write razor asp.net-mvc-3

18
推荐指数
1
解决办法
2万
查看次数

Windows 8 CollectionViewSource ObservableCollection绑定未更新

我有一个CollectionViewSource绑定到一个可观察集合的子集,以显示主页上的前n篇文章.

<CollectionViewSource
        x:Name="groupedItemsViewSource"
        Source="{Binding Groups}"
        IsSourceGrouped="true"
        ItemsPath="TopItems" />
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我执行以下操作:

protected async override void LoadState(Object navigationParameter, ...)
{
    var feedDataSource = (FeedDataSource)navigationParameter;
    this.DefaultViewModel["Groups"] = feedDataSource.Feeds;
}
Run Code Online (Sandbox Code Playgroud)

我的FeedDataSource包含ObservableCollection<FeedCategory> Feeds一个ObservableCollection<FeedItem> Items和TopItems:

public ObservableCollection<FeedItem> TopItems
{
    get { return new ObservableCollection<FeedItem>(this.Items.Take(5)); }
}
Run Code Online (Sandbox Code Playgroud)

现在 - 我添加了一个刷新方法,它将更多的FeedItems添加到Items集合中,但是当我刷新时,它对我的​​主页面上的网格视图没有影响,该主页面使用了distributedItemsViewSource作为其ItemsSource属性.

ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
Run Code Online (Sandbox Code Playgroud)

如果我离开页面,然后再返回(因此页面重建),新项目就在那里.为什么我的GridView不会显示这些变化?我认为通过绑定集合和网格视图,他们应该反映这些变化?我曾尝试将它们改为两种,一种方式 - 但它没有任何区别.

任何人都可以解释为什么这不起作用?

c# xaml windows-8 windows-runtime

9
推荐指数
1
解决办法
5820
查看次数

Windows 8 Metro RichTextColumns嵌入了超链接和图像

我正在为C#和XMAL中的Windows 8构建一个简单的rss阅读器应用程序.

Feed返回文章正文的html内容.

我创建了一个ItemDetailPage,在其中,它使用RichTextBlock列来显示文本列 - 看起来很棒.

所以我将Content属性绑定到富文本块,该块使用HtmlUtilities.ConvertToText来解析html内容中的文本.

这很好用.但是我仍然希望在内容中包含超链接和图像.最初我使用的是WebView和NavigateToString但是你不能使用列,所以得到一长页文本,这是我不想要的.

有没有办法做到这一点?我可以使用Html Agility Pack的metro端口解析图像和超链接,但有没有办法嵌入这些超链接和图像?对于图像,我考虑添加到richtextcolumns类,因此在创建新列时,在添加之前,它添加了一个图像.这可能有效,但在每列开头的图像都会很糟糕.

有没有人有任何想法如何实现这一目标?我将类似于他们已经拥有的contoso新闻应用程序设计http://msdn.microsoft.com/en-us/library/windows/apps/hh868272.aspx.如果您滚动到文章页面,他们在文章内容中有一个块引用.

c# xaml microsoft-metro windows-8

5
推荐指数
1
解决办法
2334
查看次数

通用列表与阵列

可能重复:
数组与列表<T>:何时使用哪个?

嗨,大家好,

这可能是一个非常简单的问题,但由于我刚刚开始,希望你不介意回答.

使用列表与数组时是否有任何最佳实践或经验法则?例如,我正在关注的教程使用数组来保存一些数据,他总是说"哦,一个40的数组就足够了,因为我永远不会使用更多.

但是,我已经将他的数组换成了Lists.这样,列表的大小可以根据我的运行时需求进行调整,它还允许我使用IEnumerable迭代器,这样我就可以用于每个循环.

那么,使用List有没有缩小尺寸?我猜测它比使用数组更受性能影响,但它有意义吗?我应该更频繁地尝试使用数组,还是使用列表,如果我发现性能问题,只使用数组?

感谢您的输入!

c#

4
推荐指数
1
解决办法
9185
查看次数

EF DbContext和Ninject

我前面问了一个问题,为什么当我联合两个实体集合时,默认的相等比较器似乎不起作用.

EF Code First - Linq to Entities Union EqualityComparer

答案是由于我使用了DbContext的两个差异实例,因此引用了不同的内容.

所以现在我想在整个请求中分享我的DbContent.我看到一些"复杂"的例子,但我想我会尝试一个更简单的解决方案.

所以我创建了一个IDbContext接口,它简单地概述了我的实体

public interface IDbContext {
   int SaveChanges();
   DbSet<News> News { get; set; }
   DbSet<Category> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的DbContext然后实现如下:

public class SiteContext : DbContext, IDbContext {
   public DbSet<News> News { get; set; }
   public DbSet<Category> Categories { get; set; }

   protected override void OnModelCreating(DbModelBuilder modelBuilder) {
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的两个存储库(NewsRepository和CategoryRespository)中,我将IDbContext作为构造函数参数

IDbContext _db;

public NewsRepository(IDbContext db) {
    _db = db;
}
Run Code Online (Sandbox Code Playgroud)

所以现在我假设如果我将IDbContext绑定到请求范围中的SiteContext,我的存储库将共享相同的上下文?

 kernel.Bind<IDbContext>().To<SiteContext>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

但是,当我从上一个问题再次尝试我的工会时,我仍然收到重复的实体!我做错了什么?如何在一个请求中确实使用相同的上下文?

c# ef-code-first dbcontext

4
推荐指数
1
解决办法
4464
查看次数

实体框架选择导航ICollection为IQueryable

我刚开始使用EF Code First来实现一个简单的博客.

我有一个Post对象,它有一个产品变量

virtual Product Product { get; set; }
Run Code Online (Sandbox Code Playgroud)

Product类有一组类别

virtual ICollection<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)

最后该类别有一个集合帖子.

virtual ICollection<Post> Posts { get; set; }
Run Code Online (Sandbox Code Playgroud)

到目前为止,这一点运作良好.现在我想获得特定类别的帖子.我最初通过传递类别Id来在我的PostRepository中执行此操作:例如

public IQueryable<Post> GetPosts(int catId) {
    var q = _db.Posts.Select(p => p).Distinct();
    if (catId > 0)
        q = q.Where(p => p.Product.Categories.Any(c => c.ID == catId));
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我也使用CategoryRepository来获取我的类别.由于该类别有一个产品列表,而这些产品又有一个帖子列表,我认为最好只使用它,并从我的PostRepository中删除该类别.

但是,我遇到了一个问题.要获得帖子,我在我的控制器中使用它:

model.Category = _cr.GetCategory(catId);
model.Posts =
    new PaginatedList<Post>(model.Category.Products.Select(p => p.Posts)
               .AsQueryable(), pageNumber, _defaultPageSize);
Run Code Online (Sandbox Code Playgroud)

PaginatedList是NerdDinner接收IQueryable的那个.现在,这个错误,因为我传递了一个

IQueryable<ICollection<Post>>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何从我的Category实体中获得IQueryable?我确定答案很简单,但我一直在尝试各种组合无济于事.

asp.net asp.net-mvc entity-framework code-first

1
推荐指数
1
解决办法
4099
查看次数