Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Html.BeginForm()未正确呈现_C#_Asp.net Mvc_Razor_Html.beginform - Fatal编程技术网

C# Html.BeginForm()未正确呈现

C# Html.BeginForm()未正确呈现,c#,asp.net-mvc,razor,html.beginform,C#,Asp.net Mvc,Razor,Html.beginform,在stackoverflow中搜索时,其他问题对我的情况没有帮助。 如何调试此类错误,例如Html.BeginForm未正确呈现到页面的错误 我使用这个代码 @model ExtremeProduction.Models.SelectUserGroupsViewModel @{ ViewBag.Title = "User Groups"; } <h2>Groups for user @Html.DisplayFor(model => model.UserName)</

在stackoverflow中搜索时,其他问题对我的情况没有帮助。 如何调试此类错误,例如Html.BeginForm未正确呈现到页面的错误

我使用这个代码

@model ExtremeProduction.Models.SelectUserGroupsViewModel

@{ ViewBag.Title = "User Groups"; }

<h2>Groups for user @Html.DisplayFor(model => model.UserName)</h2>
<hr />

@using (Html.BeginForm("UserGroups", "Account", FormMethod.Post, new { encType = "multipart/form-data", id = "userGroupsForm" }))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        @Html.ValidationSummary(true)
        <div class="form-group">
            <div class="col-md-10">
                @Html.HiddenFor(model => model.UserName)
            </div>
        </div>
        <h4>Select Group Assignments</h4>
        <br />
        <hr />
        <table>
            <tr>
                <th>
                    Select
                </th>
                <th>
                    Group
                </th>
            </tr>
            @Html.EditorFor(model => model.Groups)
        </table>
        <br />
        <hr />
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@model ExtremeProduction.Models.SelectUserGroupsViewModel
@{ViewBag.Title=“用户组”;}
user@Html.DisplayFor(model=>model.UserName)的组

@使用(Html.BeginForm(“UserGroups”,“Account”,FormMethod.Post,new{encType=“multipart/formdata”,id=“userGroupsForm”})) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) @Html.HiddenFor(model=>model.UserName) 选择组分配

挑选 团体 @EditorFor(model=>model.Groups)

} @ActionLink(“返回列表”、“索引”)
编辑:添加模型

    // Wrapper for SelectGroupEditorViewModel to select user group membership:
    public class SelectUserGroupsViewModel
    {
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public List<SelectGroupEditorViewModel> Groups { get; set; }

        public SelectUserGroupsViewModel()
        {
            this.Groups = new List<SelectGroupEditorViewModel>();
        }

        public SelectUserGroupsViewModel(ApplicationUser user)
            : this()
        {
            this.UserName = user.UserName;
            this.FirstName = user.FirstName;
            this.LastName = user.LastName;

            var Db = new ApplicationDbContext();

            // Add all available groups to the public list:
            var allGroups = Db.Groups;
            foreach (var role in allGroups)
            {
                // An EditorViewModel will be used by Editor Template:
                var rvm = new SelectGroupEditorViewModel(role);
                this.Groups.Add(rvm);
            }

            // Set the Selected property to true where user is already a member:
            foreach (var group in user.Groups)
            {
                var checkUserRole =
                    this.Groups.Find(r => r.GroupName == group.Group.Name);
                checkUserRole.Selected = true;
            }
        }
    }


    // Used to display a single role group with a checkbox, within a list structure:
    public class SelectGroupEditorViewModel
    {
        public SelectGroupEditorViewModel() { }
        public SelectGroupEditorViewModel(Group group)
        {
            this.GroupName = group.Name;
            this.GroupId = group.Id;
        }

        public bool Selected { get; set; }

        [Required]
        public int GroupId { get; set; }
        public string GroupName { get; set; }
    }

public class Group
    {
        public Group()
        {
        }


        public Group(string name)
            : this()
        {
            Roles = new List<ApplicationRoleGroup>();
            Name = name;
        }


        [Key]
        [Required]
        public virtual int Id { get; set; }

        public virtual string Name { get; set; }
        public virtual ICollection<ApplicationRoleGroup> Roles { get; set; }
    }
//SelectGroupEditorViewModel用于选择用户组成员身份的包装器:
公共类SelectUserGroupsViewModel
{
公共字符串用户名{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共列表组{get;set;}
public SelectUserGroupsViewModel()
{
this.Groups=新列表();
}
public SelectUserGroupsViewModel(应用程序用户)
:此()
{
this.UserName=user.UserName;
this.FirstName=user.FirstName;
this.LastName=user.LastName;
var Db=new ApplicationDbContext();
//将所有可用组添加到公共列表:
var allGroups=Db.Groups;
foreach(所有组中的var角色)
{
//编辑器模板将使用编辑器视图模型:
var rvm=新建SelectGroupEditorViewModel(角色);
此.Groups.Add(rvm);
}
//如果用户已经是成员,则将所选属性设置为true:
foreach(user.Groups中的var组)
{
var checkUserRole=
this.Groups.Find(r=>r.GroupName==group.group.Name);
checkUserRole.Selected=true;
}
}
}
//用于在列表结构中显示带有复选框的单个角色组:
公共类SelectGroupEditorViewModel
{
public SelectGroupEditorViewModel(){}
public selectgroupeditor视图模型(组)
{
this.GroupName=group.Name;
this.GroupId=group.Id;
}
已选择公共布尔值{get;set;}
[必需]
public int GroupId{get;set;}
公共字符串组名{get;set;}
}
公共课组
{
公共组()
{
}
公共组(字符串名称)
:此()
{
角色=新列表

我应该收到一个类似于我复制代码的表单


有没有办法找到让我的生活艰难了一段时间的邪恶源头?

您还没有为组定义一个编辑器,行
@Html.EditorFor(model=>model.Groups)
试图找到一个编辑器来呈现属性,然后使用一个默认的编辑器,这不符合您的要求

您要么需要定义一个知道如何呈现该属性的编辑器模板,要么需要使用for循环在页面中呈现该属性。

尝试替换此模板

@Html.EditorFor(model => model.Groups)
使用此选项(生成一个表行,其中包含所选
属性的复选框和
组名属性的标签)

@foreach(Model.Groups中的变量组)
{
CheckBoxFor(g=>group.Selected)
group.GroupName
}

什么是
?它包含什么属性?发布您的模型。添加了模型!以前尝试将Html.BeginForm!与其他模型一起使用时就发生了这种情况。您不需要使用for而不是foreach,否则绑定在回发时无法正常工作吗?是的,它应该以这种方式工作,但正确的答案是我是错过了EditorTemplates。谢谢你抽出时间。是的,我确实错过了EditorTemplates,我必须阅读!因为这是我问题的确切答案,所以标记为正确答案。谢谢。关于EditorTemplates的好文章:谢谢,请查看。@TaskosGeorge,无需感谢,请参阅
@foreach(var group in Model.Groups)
{
   <tr>
    <td>
      Html.CheckBoxFor(g => group.Selected)
    </td>
    <td>
      <span>group.GroupName</span>
    </td>
   </tr>

}