0

私はasp.net mvc 3.0を開発しており、以下のようにビューで複雑なモデルを使用しています:

@model StoresAndMalls.DataModel.Entities.User
........
<div class="editor-label">
    @Html.LabelFor(model => model.EmailAddress)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.EmailAddress)
    @Html.ValidationMessageFor(model => model.EmailAddress)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Status)
    @Html.ValidationMessageFor(model => model.Status)
</div>

 <div class="editor-label">
    @Html.LabelFor(model => model.Role)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Role)
    @Html.ValidationMessageFor(model => model.Role)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.UserRules)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.UserRules,"UserRules", new { AllRules = ViewBag.AllRules})

</div>

ここに私のモデルがあります:

public partial class User
    {
        ......

        public virtual ICollection<UserRule> UserRules { get; set; }

        public virtual Role Role { get; set; }
    }

 public class UserRule
    {
        .....
        [ForeignKey("UserId")]
        public virtual User User { get; set; }

        [ForeignKey("RuleId")]
        public virtual Rule Rule { get; set; }
    }

public partial class Role
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public virtual ICollection<User> Users { get; set; }
    }

最近のプロジェクトでは、複雑なモデルを使用してビューを作成したときに、Role などのフォーム要素に User というプレフィックスが付いていましたが、これは「User.Role」のようなものがあったことを意味しますが、現在はそうではなく、エディター テンプレートを使用しているにもかかわらずUser クラスの「UserRules」プロパティについても同様に機能せず、「User」接頭辞がありません。

Role と UserRule のエディター ビューは次のとおりです。

@model IEnumerable<StoresAndMalls.DataModel.Entities.UserRule>
@{
    var allrules = (ViewData["AllRules"] as List<StoresAndMalls.DataModel.Entities.Rule>);
    int c = 0;
}
@
    foreach (var item in allrules)
    {

        @item.Description
        @Html.CheckBox(Model.Any(x => x.RuleId == item.Id))
        c++;
    <br />
    }


-----------


@model StoresAndMalls.DataModel.Entities.Role
@{
    var selecetList = (ViewData["Roles"] as List<StoresAndMalls.DataModel.Entities.Role>).
        ConvertAll(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name, Selected = x.Id == Model.Id });
}
@Html.DropDownListFor(x => x, selecetList)


-------------

「UserRule」については、試しました

@model StoresAndMalls.DataModel.Entities.UserRule

しかし、それはスローします:

The model item passed into the dictionary is of type 'System.Collections.Generic.HashSet`1[DataModel.Entities.UserRule]', but this dictionary requires a model item of type 'DataModel.Entities.UserRule'.

編集:

 public ActionResult UpdateManager(Guid id)
        {
            ViewBag.Roles = unitofwork.RoleRepository.Get();

            ViewBag.AllRules = unitofwork.UserRepository.GetByID(id).UserRules;

            var model = unitofwork.UserRepository.GetByID(id);

            return View(model);
        }
4

0 に答える 0