gpt4 book ai didi

c# - 从局部 View 中获取模型数据

转载 作者:行者123 更新时间:2023-11-30 18:08:41 25 4
gpt4 key购买 nike

我正在使用 MVC 架构和 Entity Framework (数据库优先)开发 Intranet ASP Web 应用程序。我的问题是以下一个:

我有一个实体“Person”和一个实体“PhoneCard”,其中包括作为外键的“Person”主键(因此,Id_Person)。我使用 Entity Framework 创建了一个 CRUD Controller “PersonController”,Visual Studio 已经自动生成了相应的 View (索引、详细信息、创建、编辑和删除)。然后,我创建了另一个名为“PhoneCardController”的 CRUD Controller (始终使用 EF)。在我的 Create Person View 中,由于 AJAX 函数,我包含了 Create PhoneCard View :

function addPhoneCardCreateView() {

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

}

然后这样调用它:

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

通过这样做,我调用了局部 View ,这样我就可以在添加人员时添加电话卡。不幸的是,当我单击“创建”按钮时,它只会将新人添加到数据库中。这是我的 PersonController 中的创建操作:

        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);
}

我的局部 View :

@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
}

最佳答案

你的 Person模型具有集合属性 PhoneCards这在您的 Post 操作中始终为空,因为您不尊重 naming convention for binding to a list .还有你的PhoneCard.cshtml不是局部 View ,而是完整 View (它包含 <html><body> 标签,这是错误的)。

我真的会向您推荐 following article 其中 Steven Sanderson 详细解释了如何实现这一目标。它使用自定义 Html.BeginCollectionItem帮助程序,以便在输入字段的名称中生成非顺序索引,从而允许动态添加和删除行。

关于c# - 从局部 View 中获取模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com