小编Did*_*xis的帖子

剃刀局部视图不渲染

如果我使用以下Controller方法:

public ActionResult Menu()
{
    // do stuff...

    return PartialView("viewName", navLinks);
}
Run Code Online (Sandbox Code Playgroud)

在_Layout.cshtml中调用局部视图,如下所示:

<div id="categories">
    @{ Html.Action("Menu", "Nav"); }
</div>
Run Code Online (Sandbox Code Playgroud)

使用以下ASCX局部视图:

<%@ Control Language="C#"
    Inherits="ViewUserController<IEnumerable<MyDataType>>" %>

<% foreach(var link in Model) { %>
    <%: Html.Route.Link(link.Text, link.RouteValues) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

一切正常.好极了.


但是,如果我使用以下任一RAZOR部分视图:

@model IEnumerable<MyDataType>

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

要么...

@model IEnumerable<MyDataType>

@{
    Layout = null;
}

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

我一无所获.抛出没有异常,我只是没有得到任何渲染.我知道问题不在于控制器方法(它在ASCX局部视图中效果很好).

这里发生了什么?

partial-views razor asp.net-mvc-3

3
推荐指数
2
解决办法
5918
查看次数

如何回收自托管WCF服务

我正在Azure Woker角色中托管WCF服务,就像这样.

我希望能够定期"回收"WCF服务主机.问题是,我假设服务正在运行它自己的应用程序域,而且我也没有办法查询它的任何事件,我也可以共享辅助角色和WCF服务之间的通用数据.

作为参考,这是托管的最小代码:

public override void Run()
{
    using(var host = new ServiceHost(typeof(MyService))
    {
        // Configure host here...

        host.Open

        while(true)
        {
            Sleep(1000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想每24小时以某种方式"重新启动"主机,但我不知道如何实现这一目标.

.net c# wcf azure azure-worker-roles

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

存储库应该使用对象还是原语?

我注意到,我的存储库是否将对象或基元作为参数,或者CREATE方法是仅返回int(来自DB的ID)还是完整的对象,实际上没有任何押韵或理由.

所以我的问题是,存储库应该传递并返回对象或原语吗?你能就这件事给出什么建议?你能分享任何陷阱或经验吗?

例:

public class ProductRepository : IProductRepository
{
                // Pass in the whole object to the repo method...?
    public int Add(Product product)
    {
        // return just the productId...?
    }

                    // Pass in the individual primitive values...?
    public Product Add(string productName, decimal productPrice, string description)
    {
        // return the whole Product object...?
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要来自多个对象的信息呢?当然,从OOP的角度来看,最好在这里传递物品,不是吗?(我在这里厚颜无耻......)

public int Add(int merchantId, Product product)
{
    // database call needs merchant info...
}

public int Add(Merchant merchant, Product product)
{
    var merchantId = merchant.ID; …
Run Code Online (Sandbox Code Playgroud)

c# oop orm repository repository-pattern

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

ASP.NET MVC 3 + jQuery Ajax JSON - 防止在新页面中打开JSON

我有一个Action方法返回一个JSON序列化的对象.我遇到的问题是返回的JSON是在新页面中打开,而不是由jquery.Ajax方法的"success"函数处理.

这是控制器动作:

[HttpPost]
public ActionResult AddAssignment(AssignmentViewModel avm)
{
    db.Assignments.Add(new Assignment
    {
        Name       = avm.Name,
        DueDate    = DateTime.Parse(avm.DueDate),
        CourseID   = avm.CourseID,
        IsComplete = false
    });
    db.SaveChanges();

    avm.Course = db.Courses
        .Where(x => x.CourseID == avm.CourseID)
        .SingleOrDefault()
        .Name;

    return Json(avm);
}
Run Code Online (Sandbox Code Playgroud)

这是视图(表单):

@model Fooburg.Mvc.Models.AssignmentViewModel

<h2 style="margin: 0 0 24px 0">Add Assignment:</h2>

@using (Html.BeginForm("AddAssignment",
    "Assignments",
    FormMethod.Post,
    new { @id = "add-assignment-form" }))
{
    <dl class="tabular">
        <dt>Course:</dt>
        <dd>
        @Html.DropDownListFor(x => x.CourseID, new SelectList(ViewBag.Courses, "CourseID", "Name"))
        </dd>
        <dt>Assignment:</dt>
        <dd>
        @Html.TextBoxFor(x => x.Name)
        </dd>
        <dt>Due Date:</dt>
        <dd> …
Run Code Online (Sandbox Code Playgroud)

ajax asp.net-mvc jquery json

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

C#通用类型参数跨类共享

假设您有以下Generic类heirarchy:

public abstract class GenericBase<T>
{
    T SomeProperty{ get; set; }
}

public class Foo<T>
{
    T SomeProperty{ get; set; }
}

public abstract class GenericChild<T> : GenericBase<T>
{
    // ...

    public bool DoSomething(Foo<T> foo)
    {
        // This is invalid:
        return SomeProperty == foo.SomeProperty;
    }
}
Run Code Online (Sandbox Code Playgroud)

DoSomething方法中的相等检查将无法编译.它会产生以下错误:

Operator '==' cannot be applied to operands of type 'T' and 'T'
Run Code Online (Sandbox Code Playgroud)

如果它是相关的,这些类是在单独的文件中.允许这种平等比较的最佳解决方法是什么?在C#中是否存在某种模式或某些东西?

更新:

一些答案建议使用:

where T : SomeClass
Run Code Online (Sandbox Code Playgroud)

不幸的是,T经常会是一种原始类型.

c# oop generics inheritance

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

内部成员可以被覆盖吗?

假设您有以下类声明:

public abstract class Foo
{
    public class Bar
    {
        public virtual void DoSomething() { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以覆盖Foo的子类中的Bar.DoSomething(),la:

public class Quz : Foo
{
    public override void Bar::DoSomething() { ... }
}
Run Code Online (Sandbox Code Playgroud)

显然语法不起作用,但是这样可能吗?

.net c# oop

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

在LINQ中应用任意数量的OrderBy()

我写了一个扩展方法,可以采用任意数字或OrderBy()并递归应用它们....

我最好展示一个例子:

public static IEnumerable<User> ApplyOrdering(this IEnumerable<User> users,
                                              int index,
                                              params Func<User, string>[] sorts)
{
    if(index == sorts.Length)
        return users;

    users = users.OrderBy(sorts[index]);
    index++;
    return users.ApplyOrdering(index, sorts);
}

// And it's called like this:
void Example()
{
    var users = GetUnsortedUsers();

    var sortedUsers = users.ApplyOrdering(0, u => u.DisplayName,
                                             u => u.Username,
                                             u => u.Email);
}
Run Code Online (Sandbox Code Playgroud)

这不是一个问题,但我想知道这是否可以以更好,更优雅的方式完成?

首先,我不喜欢在方法调用中声明起始索引.另一个可能的挑剔是必须调用.ApplyOrdering(),最后一次只是为了返回用户.

你觉得怎么样?!我很想看到C#大师们提出的一些聪明的解决方案!

编辑:我知道你们中的一些人会指出,只需编写这样的查询就会更好,更具表现力:

var orderedUsers = users.OrderBy(u => u.DisplayName)
                        .ThenBy(u => u.Username)
                        .ThenBy(u => u.Email);
Run Code Online (Sandbox Code Playgroud)

但在我的场景中,过滤器的数量和类型并不总是相同,所以我需要一个可以容纳任意数量的过滤器的通用解决方案.

.net c# linq ienumerable extension-methods

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

LINQ GroupBy和Select在不同的属性上

如果我有以下集合:

var foos = new List<Foo>
{
    new Foo{ Name = "A", Value = 1 },
    new Foo{ Name = "B", Value = 1 },
    new Foo{ Name = "B", Value = 2 },
    new Foo{ Name = "C", Value = 1 },
};
Run Code Online (Sandbox Code Playgroud)

我想最终:

A-1
B-2
C-1
Run Code Online (Sandbox Code Playgroud)

在复制"B"的情况下,我想选择具有最高值的"B"?

就像是:

var filteredFoos = foos.GroupBy(x => x.Name).Select_Duplicate_With_Highest_Value
Run Code Online (Sandbox Code Playgroud)

.net c# linq linq-to-objects group-by

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