小编Ali*_*uri的帖子

将集合传递给EditorFor()时,它会为输入元素生成无效的名称

我有一个BookCreateModel,它包含书籍的平面信息,例如Title,PublishYear&etc以及书籍作者集合(复杂类型):

public class BookCreateModel
{
    public string Title { get; set; }
    public int Year { get; set; }
    public IList<AuthorEntryModel> Authors { get; set; }
}

public class AuthorEntryModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在CreateBook视图中我使用了EditorForhelper:

@Html.EditorFor(m => m.Authors, "AuthorSelector")
Run Code Online (Sandbox Code Playgroud)

EDIT1:

和AuthorSelector模板如下:

<div class="ptr_authors_wrapper">
    @for (int i = 0; i < Model.Count; i++)
    {
       <div class="ptr_author_line" data-line-index="@i">
        @Html.TextBoxFor(o => o[i].FirstName)
        @Html.TextBoxFor(o => o[i].LastName)
       </div>
    }
</div>
<script> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model-binding editorfor razor asp.net-mvc-3

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

C#属性:使用枚举常量作为输入参数

我正在尝试为我的MVC应用程序实现一种新的基于权限的访问方法; 我们有几个权限组,每个组都包含一个权限列表.例如,我们有Invoices权限组,其中包含CreateInvoice,RemoveInvoice,etc权限密钥.

在这种方法中,每个mvc Action都需要特定的执行权限.我正在尝试通过CustomAttributes执行此操作,如下所示:

public class InvoiceController : Controller
    {
        [RequirePermission(Permissions.Invoices.CreateInvoice)]
        public ActionResult Create()
        {
            return View();
        }
    }
Run Code Online (Sandbox Code Playgroud)

为了让开发人员更容易记住不同的权限组和权限密钥,我正在尝试创建一个预定义的权限列表,该权限应该是权限组和权限密钥的组合.但由于在C#中使用属性参数的限制,我无法使其工作.(我不想制作一个额外的大型枚举器并将所有权限密钥放在那里)

我的最后一次尝试是为每个权限组创建一个枚举器,然后在其中将权限键定义为枚举常量:

public class PermissionEnums
{
    [PermissionGroup(PermissionGroupCode.Invoice)]
    public enum Invoices
    {
        CreateInvoice = 1,
        UpdateInvoice = 2,
        RemoveInvoice = 3,
        ManageAttachments = 4
    }

    [PermissionGroup(PermissionGroupCode.UserAccounts)]
    public enum UserAccounts
    {
        Create = 1,
        ChangePassword = 2
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们在这里有代码组合,使用PermissionGroup属性指定的权限组密钥和在每个枚举常量上指定为数字代码的权限密钥的代码.

RequirePermission属性定义如下:

public class RequirePermissionAttribute : Attribute
{
    private Enum _Permission; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc access-control custom-attributes

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