2

MVCアーキテクチャとEntityFramework(データベースファースト)を使用してイントラネットASPWebアプリケーションを開発しています。私の問題は次のとおりです。

エンティティ「Person」と、外部キーとして「Person」の主キー(つまり、Id_Person)を含むエンティティ「PhoneCard」があります。Entity Frameworkを使用してCRUDコントローラー「PersonController」を作成しました。VisualStudioは、対応するビュー(インデックス、詳細、作成、編集、削除)を自動的に生成しました。次に、「PhoneCardController」という名前の別のCRUDコントローラー(常にEFを使用)を作成しました。私のCreatePersonビューには、AJAX関数のおかげでCreatePhoneCardビューが含まれています。

function addPhoneCardCreateView() {

    $('#divCreatePhoneCard').load("@Url.Action("Create","PhoneCard")");

}

そしてそれをそのように呼んでください:

<a href = "javascript:addPhoneCardCreateView()">Add a Phone card</a>
    <div id = "divCreatePhoneCard"></div>

これにより、部分ビューを呼び出して、人を追加しているときにテレホンカードを追加できるようにします。残念ながら、[作成]ボタンをクリックすると、データベースに新しい人が追加されるだけです。これが私のPersonControllerのCreateアクションです:

        public ActionResult Create()
    {
        ViewBag.Id_ProductPackageCategory = new SelectList(db.ProductPackageCategories, "Id_ProductPackageCategory", "Name");
        return View();
    }

    //
    // POST: /Person/Create

    [HttpPost]
    public ActionResult Create(Person person)
    {
        if (ModelState.IsValid)
        {

            db.Persons.AddObject(person);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.Id_ProductPackageCategory = new SelectList(db.ProductPackageCategories, "Id_ProductPackageCategory", "Name", person.Id_ProductPackageCategory);
        return View(person);
    }

私の部分的な見方:

@model BuSIMaterial.Models.PhoneCard

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Create</title>
</head>
<body>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>PhoneCard</legend>

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

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

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

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

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

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

            <div class="editor-label">
                @Html.LabelFor(model => model.Id_Person, "Person")
            </div>
            <div class="editor-field">
                @Html.DropDownList("Id_Person", String.Empty)
                @Html.ValidationMessageFor(model => model.Id_Person)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Id_PhoneSubscription, "PhoneSubscription")
            </div>
            <div class="editor-field">
                @Html.DropDownList("Id_PhoneSubscription", String.Empty)
                @Html.ValidationMessageFor(model => model.Id_PhoneSubscription)
            </div>
        </fieldset>
    }

</body>
</html>

人物モデル:

[EdmEntityTypeAttribute(NamespaceName="BuSIMaterialModel", Name="Person")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Person : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new Person object.
    /// </summary>
    /// <param name="id_Person">Initial value of the Id_Person property.</param>
    /// <param name="firstName">Initial value of the FirstName property.</param>
    /// <param name="lastName">Initial value of the LastName property.</param>
    /// <param name="numNat">Initial value of the NumNat property.</param>
    /// <param name="startDate">Initial value of the StartDate property.</param>
    /// <param name="upgrade">Initial value of the Upgrade property.</param>
    /// <param name="id_ProductPackageCategory">Initial value of the Id_ProductPackageCategory property.</param>
    /// <param name="houseToWorkKilometers">Initial value of the HouseToWorkKilometers property.</param>
    public static Person CreatePerson(global::System.Int64 id_Person, global::System.String firstName, global::System.String lastName, global::System.String numNat, global::System.DateTime startDate, global::System.Boolean upgrade, global::System.Int64 id_ProductPackageCategory, global::System.Decimal houseToWorkKilometers)
    {
        Person person = new Person();
        person.Id_Person = id_Person;
        person.FirstName = firstName;
        person.LastName = lastName;
        person.NumNat = numNat;
        person.StartDate = startDate;
        person.Upgrade = upgrade;
        person.Id_ProductPackageCategory = id_ProductPackageCategory;
        person.HouseToWorkKilometers = houseToWorkKilometers;
        return person;
    }

    #endregion
    #region Primitive Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Int64 Id_Person
    {
        get
        {
            return _Id_Person;
        }
        set
        {
            if (_Id_Person != value)
            {
                OnId_PersonChanging(value);
                ReportPropertyChanging("Id_Person");
                _Id_Person = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("Id_Person");
                OnId_PersonChanged();
            }
        }
    }
    private global::System.Int64 _Id_Person;
    partial void OnId_PersonChanging(global::System.Int64 value);
    partial void OnId_PersonChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    [Required]
    public global::System.String FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            OnFirstNameChanging(value);
            ReportPropertyChanging("FirstName");
            _FirstName = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged("FirstName");
            OnFirstNameChanged();
        }
    }
    private global::System.String _FirstName;
    partial void OnFirstNameChanging(global::System.String value);
    partial void OnFirstNameChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    [Required]
    public global::System.String LastName
    {
        get
        {
            return _LastName;
        }
        set
        {
            OnLastNameChanging(value);
            ReportPropertyChanging("LastName");
            _LastName = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged("LastName");
            OnLastNameChanged();
        }
    }
    private global::System.String _LastName;
    partial void OnLastNameChanging(global::System.String value);
    partial void OnLastNameChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    [Required]
    public global::System.String NumNat
    {
        get
        {
            return _NumNat;
        }
        set
        {
            OnNumNatChanging(value);
            ReportPropertyChanging("NumNat");
            _NumNat = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged("NumNat");
            OnNumNatChanged();
        }
    }
    private global::System.String _NumNat;
    partial void OnNumNatChanging(global::System.String value);
    partial void OnNumNatChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.DateTime StartDate
    {
        get
        {
            return _StartDate;
        }
        set
        {
            OnStartDateChanging(value);
            ReportPropertyChanging("StartDate");
            _StartDate = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("StartDate");
            OnStartDateChanged();
        }
    }
    private global::System.DateTime _StartDate;
    partial void OnStartDateChanging(global::System.DateTime value);
    partial void OnStartDateChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public Nullable<global::System.DateTime> EndDate
    {
        get
        {
            return _EndDate;
        }
        set
        {
            OnEndDateChanging(value);
            ReportPropertyChanging("EndDate");
            _EndDate = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("EndDate");
            OnEndDateChanged();
        }
    }
    private Nullable<global::System.DateTime> _EndDate;
    partial void OnEndDateChanging(Nullable<global::System.DateTime> value);
    partial void OnEndDateChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Boolean Upgrade
    {
        get
        {
            return _Upgrade;
        }
        set
        {
            OnUpgradeChanging(value);
            ReportPropertyChanging("Upgrade");
            _Upgrade = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("Upgrade");
            OnUpgradeChanged();
        }
    }
    private global::System.Boolean _Upgrade;
    partial void OnUpgradeChanging(global::System.Boolean value);
    partial void OnUpgradeChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    [Required]
    public global::System.Int64 Id_ProductPackageCategory
    {
        get
        {
            return _Id_ProductPackageCategory;
        }
        set
        {
            OnId_ProductPackageCategoryChanging(value);
            ReportPropertyChanging("Id_ProductPackageCategory");
            _Id_ProductPackageCategory = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("Id_ProductPackageCategory");
            OnId_ProductPackageCategoryChanged();
        }
    }
    private global::System.Int64 _Id_ProductPackageCategory;
    partial void OnId_ProductPackageCategoryChanging(global::System.Int64 value);
    partial void OnId_ProductPackageCategoryChanged();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Decimal HouseToWorkKilometers
    {
        get
        {
            return _HouseToWorkKilometers;
        }
        set
        {
            OnHouseToWorkKilometersChanging(value);
            ReportPropertyChanging("HouseToWorkKilometers");
            _HouseToWorkKilometers = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("HouseToWorkKilometers");
            OnHouseToWorkKilometersChanged();
        }
    }
    private global::System.Decimal _HouseToWorkKilometers;
    partial void OnHouseToWorkKilometersChanging(global::System.Decimal value);
    partial void OnHouseToWorkKilometersChanged();

    #endregion

    #region Navigation Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("BuSIMaterialModel", "FK_bm_Persons_bm_ProductPackageCategories", "bm_ProductPackageCategories")]
    public ProductPackageCategory ProductPackageCategory
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ProductPackageCategory>("BuSIMaterialModel.FK_bm_Persons_bm_ProductPackageCategories", "bm_ProductPackageCategories").Value;
        }
        set
        {
            ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ProductPackageCategory>("BuSIMaterialModel.FK_bm_Persons_bm_ProductPackageCategories", "bm_ProductPackageCategories").Value = value;
        }
    }
    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [BrowsableAttribute(false)]
    [DataMemberAttribute()]
    public EntityReference<ProductPackageCategory> ProductPackageCategoryReference
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ProductPackageCategory>("BuSIMaterialModel.FK_bm_Persons_bm_ProductPackageCategories", "bm_ProductPackageCategories");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<ProductPackageCategory>("BuSIMaterialModel.FK_bm_Persons_bm_ProductPackageCategories", "bm_ProductPackageCategories", value);
            }
        }
    }

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("BuSIMaterialModel", "FK_bm_PhoneCards_bm_Persons", "bm_PhoneCards")]
    public EntityCollection<PhoneCard> PhoneCards
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<PhoneCard>("BuSIMaterialModel.FK_bm_PhoneCards_bm_Persons", "bm_PhoneCards");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<PhoneCard>("BuSIMaterialModel.FK_bm_PhoneCards_bm_Persons", "bm_PhoneCards", value);
            }
        }
    }

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("BuSIMaterialModel", "FK_bm_ProductAllocations_bm_Persons", "bm_ProductAllocations")]
    public EntityCollection<ProductAllocation> ProductAllocations
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<ProductAllocation>("BuSIMaterialModel.FK_bm_ProductAllocations_bm_Persons", "bm_ProductAllocations");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<ProductAllocation>("BuSIMaterialModel.FK_bm_ProductAllocations_bm_Persons", "bm_ProductAllocations", value);
            }
        }
    }

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("BuSIMaterialModel", "FK_bm_VehicleFuelCards_bm_Persons", "bm_VehicleFuelCards")]
    public EntityCollection<VehicleFuelCard> VehicleFuelCards
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<VehicleFuelCard>("BuSIMaterialModel.FK_bm_VehicleFuelCards_bm_Persons", "bm_VehicleFuelCards");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<VehicleFuelCard>("BuSIMaterialModel.FK_bm_VehicleFuelCards_bm_Persons", "bm_VehicleFuelCards", value);
            }
        }
    }

    #endregion
}
4

1 に答える 1

2

モデルには、を尊重しなかったため、Postアクションでは常にnullでPersonあるコレクションプロパティがあります。また、あなたは部分的なビューではなく、完全なビューです(間違っているタグが含まれています)。PhoneCardsnaming convention for binding to a listPhoneCard.cshtml<html><body>

following articleスティーブン・サンダーソンがそれを達成する方法を詳細に説明していることを本当にお勧めします。カスタムHtml.BeginCollectionItemヘルパーを使用して、入力フィールドの名前に非順次インデックスを生成し、行を動的に追加および削除できるようにします。

于 2013-03-01T16:04:27.657 に答える