Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc 如何以最优雅的方式实现MVC4中对象列表的编辑视图?_Asp.net Mvc_Razor - Fatal编程技术网

Asp.net mvc 如何以最优雅的方式实现MVC4中对象列表的编辑视图?

Asp.net mvc 如何以最优雅的方式实现MVC4中对象列表的编辑视图?,asp.net-mvc,razor,Asp.net Mvc,Razor,我有一个“ContactInfo”视图,我想从用户那里获得不同类型的不同电话号码列表。用户应该能够添加、编辑和删除数字,并指定其类型。至少需要一个手机号码 我尝试过不同的方法,但在某个时候我已经走到了死胡同。我认为描述整个场景并寻求解决方案比询问特定的bug更有效。我很感谢你的回答 这是我的手机课程: public partial class Phone { public int Id { get; set; } public int UserId { get; set; }

我有一个“ContactInfo”视图,我想从用户那里获得不同类型的不同电话号码列表。用户应该能够添加、编辑和删除数字,并指定其类型。至少需要一个手机号码

我尝试过不同的方法,但在某个时候我已经走到了死胡同。我认为描述整个场景并寻求解决方案比询问特定的bug更有效。我很感谢你的回答

这是我的手机课程:

public partial class Phone
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public string Number { get; set; }
    public PhoneNumberType Type { get; set; }

    public virtual User User { get; set; }
}
这是电话类型枚举:

public enum PhoneNumberType
{
    None,
    Mobile,
    Home,
    Work
}
这是视图的模型(我还包括了一个列表,该列表从枚举填充电话类型,以填充类型组合框):

公共类ContactInfoModel
{
公共int Id{get;set;}
公共字符串电子邮件地址{get;set;}
公共字符串国家{get;set;}
公共字符串省{get;set;}
公共字符串country{get;set;}
公共字符串City{get;set;}
公共字符串地址{get;set;}
公共i收集电话{get;set;}
私有IEnumerable\u电话类型;
公共IEnumerable电话类型
{
得到
{
if(this.\u phoneTypes==null)
{
_phoneTypes=EnumUtility.GetEnumMembers(typeof(PhoneNumberType));
}
返回电话类型;
}
}
}
最后,这是一种观点:

@model Jobeteria.Models.JobSeekers.ContactInfoModel

@{ViewBag.Title = "Contact Information";}

@using (Html.BeginForm()){
@Html.AntiForgeryToken()
<header class="pages-header">
    <div class="pages-header-bg text-background"></div>
    <hgroup>
        <h1>@ViewBag.Title</h1>
    </hgroup>
</header>
<div class="pages-wide-column">
    <div class="pages-body-bg text-background"></div>
    <div class="pages-content-marginer">
        <fieldset>
            <legend>Contact Information</legend>
            <ol>
                <li>
                    @*view to manipulate phone numbers*@
                </li>
                <li>
                    @Html.LabelFor(model => model.EmailAddress)
                    @Html.EditorFor(model => model.EmailAddress)
                    <br/>
                    @Html.ValidationMessageFor(model => model.EmailAddress)
                </li>
                <li>
                    @Html.LabelFor(model => model.Country)
                    @Html.EditorFor(model => model.Country)
                    <br/>
                    @Html.ValidationMessageFor(model => model.Country)
                </li>
                <li>
                    @Html.LabelFor(model => model.Province)
                    @Html.EditorFor(model => model.Province)
                    <br/>
                    @Html.ValidationMessageFor(model => model.Province)
                </li>
                <li>
                    @Html.LabelFor(model => model.County)
                    @Html.EditorFor(model => model.County)
                    <br/>
                    @Html.ValidationMessageFor(model => model.County)
                </li>
                <li>
                    @Html.LabelFor(model => model.City)
                    @Html.EditorFor(model => model.City)
                    <br/>
                    @Html.ValidationMessageFor(model => model.City)
                </li>
                <li>
                    @Html.LabelFor(model => model.Address)
                    @Html.TextAreaFor(model => model.Address)
                    <br/>
                    @Html.ValidationMessageFor(model => model.Address)
                </li>
                <li class="horizontal-field">
                    <input type="submit" value="SAVE" />
                    <input type="reset" value="Cancel" onclick="javascript: history.back(1);"/>
                </li>
            </ol>
        </fieldset>
    </div>
</div>}
@model jobetia.Models.jobseers.ContactInfoModel
@{ViewBag.Title=“联系信息”;}
@使用(Html.BeginForm()){
@Html.AntiForgeryToken()
@视图包。标题
联系方式
  • @*查看以操纵电话号码*@
  • @LabelFor(model=>model.EmailAddress) @EditorFor(model=>model.EmailAddress)
    @Html.ValidationMessageFor(model=>model.EmailAddress)
  • @LabelFor(model=>model.Country) @EditorFor(model=>model.Country)
    @Html.ValidationMessageFor(model=>model.Country)
  • @LabelFor(model=>model.Province) @EditorFor(model=>model.Province)
    @Html.ValidationMessageFor(model=>model.Province)
  • @LabelFor(model=>model.country) @EditorFor(model=>model.country)
    @Html.ValidationMessageFor(model=>model.County)
  • @LabelFor(model=>model.City) @EditorFor(model=>model.City)
    @Html.ValidationMessageFor(model=>model.City)
  • @LabelFor(model=>model.Address) @Html.TextAreaFor(model=>model.Address)
    @Html.ValidationMessageFor(model=>model.Address)
  • }
    我总是觉得模型绑定到可枚举项有点痛苦-这基本上就是您试图实现的,允许用户编辑电话号码列表

    在验证方面,我将编写一个自定义验证属性以在视图模型中使用-这将检查是否至少存在一个电话号码

    Phil Haack在博客中发布了关于绑定列表的内容:

    根据Phil的帖子改编,我认为你必须这样做:

    <% for (int i = 0; i < userPhoneNumeberCount; i++) { %>
    
      <%: Html.TextBoxFor(m => m.Phones[i].Number ) %>
      <%: Html.SelectListFor(m => m.Phones[i].Type, PhoneNumberSelectListData ) %> 
    <% } %>
    
    
    m、 电话[i].号码)%>
    m、 电话[i]。类型,电话号码选择列表数据)%>
    
    Phil Haack在1902年写下了这段代码,我一直在这段代码上磕磕绊绊。MVC5
    <% for (int i = 0; i < userPhoneNumeberCount; i++) { %>
    
      <%: Html.TextBoxFor(m => m.Phones[i].Number ) %>
      <%: Html.SelectListFor(m => m.Phones[i].Type, PhoneNumberSelectListData ) %> 
    <% } %>