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

entity-framework-4 – ASP.NET MVC 3如何在Create视图上为具有I

发布时间:2020-12-16 07:44:04 所属栏目:asp.Net 来源:网络整理
导读:注意:我使用的是MVC3 Razor,EF4,CF-CTP5 如何允许视图能够在客户端上动态地为每个组织添加多个Address类,并在post上强烈绑定到模型? 如果(ModelState.IsValid == false)如何输入3个地址并发布无效模型,那么如何在模型中使用视图解析值?它会重新填充数字地
注意:我使用的是MVC3 Razor,EF4,CF-CTP5

>如何允许视图能够在客户端上动态地为每个组织添加多个Address类,并在post上强烈绑定到模型?
>如果(ModelState.IsValid == false)如何输入3个地址并发布无效模型,那么如何在模型中使用视图解析值?它会重新填充数字地址及其适当的值?

这是我的模特:

public class Organization
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
    public virtual ICollection<PhoneNumber> PhoneNumbers { get; set; }
    ...
}

public class Address
{
    public int Id { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
    public int Type { get; set; }
}

我试图弄清楚如何让组织的创建操作(/组织/创建)像这样处理创建(这样地址和电话号码是提交的模型的一部分):

[HttpPost]
public ActionResult Create(Organization organization)
{
    if (ModelState.IsValid)
    {
        _db.Organizations.Add(organization);
        _db.SaveChanges();
        return RedirectToAction("Details",organization.Id);
    }

    return View(organization);

}

解决方法

你的问题很有趣:)
这只是您的要求的一种方式,我相信有比我更好的方式.

我将从你的第二个问题开始:

How can you have the view parse values
in the model if the
(ModelState.IsValid == false) such
that if you enter 3 addresses and post
an invalid model,it re-populates the
number addresses and with their
appropriate values?

如果我正确理解您的请求,对我来说看起来很简单.答案就是编写视图代码来呈现Model类内容,并将无效模型返回到客户端,就像在Create操作中一样.

如果您的表单(及其字段)已使用ValidationSummary / ValidationMessage html帮助程序进行修饰,您还将看到验证消息.

  1. How can you allow the view to have the ability to add multiple Address
    classes per Organization dynamically
    on the client,and bound strongly to
    the model on post?

您可以拥有显示组织属性的主视图,然后使用另一个显示相关地址的视图.在这里,您可以放置??一个超链接或按钮,打开一个对话框以添加新的地址对象,然后在完成后刷新地址列表.同样,您可以在列表中编辑和删除按钮作为图标.

地址列表是在客户端完全处理的一个标记,要正确绑定到服务器端,Model类应该遵循一些简单的命名规则来获取它的输入属性.

要使默认模型Binder类正确绑定您的表单,请使用组织类的以下代码段

@using (Html.BeginForm()) {
    @Html.HiddenFor(o => o.Id)
    @Html.ValidationSummary( true )
    <fieldset>
        <legend>My Organization</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>
        <br />
        <div id="container">
            <div>Address List</div>
            @foreach (Address a in Model.Addresses ) {
                Html.EditorFor(a);
            }
        </div>
        <div style="text-align:right;margin-top:14px;">
            <input type="submit" id="btnSubmit" value="Save" />
        </div>
    </fieldset>
}

要自动绑定,表单的结果代码应如下所示

<form action="..." id="..." method="post">
    <input type="hidden" name="Id" value="2">
    <input type="hidden" name="Name" value="Acme Corporation">

    <!-- markup for each address -->
    <input type="hidden" name="Addresses[0].Id" value="1">
    <input type="hidden" name="Addresses[0].Line1" value="Line 1">
    <input type="hidden" name="Addresses[0].Line2" value="Line 2">
    ... and so on...
</form>

将它的属性命名为Addresses [index] .PropertyName.
如果您在客户端上添加新地址,那么这并不重要:只要您的代码遵守此规则,您就可以使用默认的Model Binder为您完成工作.

希望这可以帮助

(编辑:李大同)

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

    推荐文章
      热点阅读