加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 当模型中存在一对多关系时,MVC“创建视图”

发布时间:2020-12-16 00:17:18 所属栏目:asp.Net 来源:网络整理
导读:我的模型很简单,一个客户可以有很多电话号码: 我在实体框架中代表了这一点 生成的客户端类如下. public partial class Client{ public Client() { this.PhoneNumbers = new HashSetPhoneNumber(); } public int Id { get; set; } public string Name { get;
我的模型很简单,一个客户可以有很多电话号码:

我在实体框架中代表了这一点

生成的客户端类如下.

public partial class Client
{
    public Client()
    {
        this.PhoneNumbers = new HashSet<PhoneNumber>();
    }

    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<PhoneNumber> PhoneNumbers { get; set; }
}

现在我需要为“创建客户端”创建一个视图页面.此页面还应有空间输入PhoneNumbers(例如:默认情况下应该有两个文本框来输入电话号码)

<fieldset>
    <legend>Client</legend>

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

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

作为上面的“创建视图”,我们可以轻松地为“model.Name”提供空间,因为它是一个简单的属性.但是我怎么能做类似的电话号码收集.. ??

我知道我们可以通过丑陋的javascript代码实现这一点,但我想知道最简单易用的方法,我们可以使用ASP.NET MVC ……?

解决方法

你必须做一些事情:

首先创建一个具有所需属性的ViewModel:

public class ClientViewModel
{
   public int Id {get;set;}
   public string Name {get;set;}
   public PhoneNumber PhoneNumber1 {get;set;}
   public PhoneNumber PhoneNumber2 {get;set;}
}

更改Create以返回ClientViewModel

[HttpGet]
public ActionResult Create()
{
   return View(new ClientViewModel());
}

映射HttpPost以使用ClientViewModel并将值映射到它:

[HttpPost]
public ActionResult Create(ClientViewModel clientViewModel)
{
   var client = new Client();
   client.Name = clientViewModel.Name;
   client.PhoneNumbers.Add(clientViewModel.PhoneNumber1);
   client.PhoneNumbers.Add(clientViewModel.PhoneNumber2);
   db.Clients.Add(client);
   db.SaveChanges();
   return RedirectToAction("Index","Client");
}

然后,最后,修改您的视图:

<fieldset>
   <legend>Client</legend>

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

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

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

   <p>
      <input type="submit" value="Create" />
   </p>
</fieldset>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读