小编Jus*_*rds的帖子

字段子集的验证摘要

我有一个包含3个不同部分的表单,看起来像这样:

<form action="/Submit/" method="POST">
    <h2>
        Your Info:
    </h2>
    <ul>
        <li>
            <label>
                First Name:
                @Html.TextBoxFor(m => m.FirstName)
            </label>
        </li>
        <li>
            <label>
                Last Name:
                @Html.TextBoxFor(m => m.LastName)
            </label>
        </li>
    </ul>
    <h2>
        Membership:
    </h2>
    <ul>
        <li>
            <label>@Html.RadioButtonFor(m => m.MembershipLength_Months, 3) 3 Months</label>
        </li>
        <li>
            <label>@Html.RadioButtonFor(m => m.MembershipLength_Months, 12) 12 Months</label>
        </li>
    </ul>
   <h2>
        Billing Info:
    </h2>
    @Html.EditorFor(m=> m.PaymentInfo)
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

我想做的是每个部分都有一个摘要.我知道我可以在每个H2下做这样的事情:

@if (ViewData.ModelState.Keys.Contains("FirstName") || ViewData.ModelState.Keys.Contains("LastName"))
{
    <div>
        summary text
        @Html.ValidationMessageFor(m => m.FirstName)
        @Html.ValidationMessageFor(m => m.LastName)
    </div>
}
Run Code Online (Sandbox Code Playgroud)

但感觉应该有一个更清洁的解决方案.Google完全失败了,我无法找到自定义帮助程序或验证摘要扩展程序,它使用集合来表示要汇总的属性.

每个部分都包含大量字段,因此ModelState.Keys比较很快就会变得非常难看.有干净的方法吗?

asp.net-mvc

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

如何在C#项目中使用VB.Net扩展方法

我有一个遗留的VB.Net类库,其中包含一些扩展方法,其中一个大致如下:

Namespace Extensions
    Public Module OrmExtensions

        <Extension()>
        Public Function ToDomainObjectCollection(ByRef objects As OrmCollection(Of OrmObject)) As DomainObjectCollection
            Return objects.AsQueryable().ToDomainObjectCollection()
        End Function

        <Extension()>
        Public Function ToDomainObjectCollection(ByRef objects As IQueryable(Of OrmObject)) As DomainObjectCollection
            Dim doc As New DomainObjectCollection()
            For Each o In objects
                doc.Add(o.ToDomainObject())
            Next
            Return doc
        End Function
    End Module
End Namespace
Run Code Online (Sandbox Code Playgroud)

要在VB中使用这些扩展,我只需要导入Extensions.OrmExtensions.我有另一个项目,它在C#中依赖于具有扩展的VB,我无法让它们工作.OrmExtensions不可用,只使用命名空间VBProject.Extensions不会使扩展可用.

有多个项目依赖于VB项目,理想情况下,所有项目都可以使用扩展.

我已经完成了一些谷歌搜索,但还没有找到任何关于在C#中实际使用VB扩展方法的事情.我认为问题是他们需要在模块中,但我无法确认.

我宁愿不在任何需要的地方复制扩展方法(特别是在我们的单元测试项目中,这是在C#中).

.net c# vb.net

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

从一个集合转换为另一个集合的通用扩展方法

我在一个代码库中工作,它有很多一流的集合.

为了便于在LINQ中使用这些集合,每个集合都有一个扩展方法,如下所示:

public static class CustomCollectionExtensions
{
    public static CustomCollection ToCustomCollection(this IEnumerable<CustomItem> enumerable)
    {
        return new CustomCollection(enumerable);
    }
}
Run Code Online (Sandbox Code Playgroud)

随附的构造函数:

public class CustomCollection : List<CustomItem>
{
    public CustomCollection(IEnumerable<CustomItem> enumerable) : base(enumerable) { }
}
Run Code Online (Sandbox Code Playgroud)

这最终成了一堆样板,所以我试图写一个泛型,IEnumerable<U>.To<T>()这样我们就不必继续生成这些特定的ToXCollection()方法.

我得到了:

public static class GenericCollectionExtensions
{
    public static T To<T, U>(this IEnumerable<U> enumerable) where T : ICollection<U>, new()
    {
        T collection = new T();
        foreach (U u in enumerable)
        {
            collection.Add(u);
        }
        return collection;
    }
}
Run Code Online (Sandbox Code Playgroud)

这必须被称为 customCollectionInstance.OrderBy(i => i.Property).To<CustomCollection, CustomItem>()

有没有办法避免必须指定CustomItem …

c# generics

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

标签 统计

c# ×2

.net ×1

asp.net-mvc ×1

generics ×1

vb.net ×1