Asp.net mvc 4 从Razor视图调用参数构造函数
我有一个观点,我已经列在下面 当我发布表单时,将调用组织的默认构造函数。 但是,我希望调用另一个构造函数,它接受Party对象 如何在Razor或任何其他使用mvc的系统中做到这一点,请给出建议 我的代码:Asp.net mvc 4 从Razor视图调用参数构造函数,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我有一个观点,我已经列在下面 当我发布表单时,将调用组织的默认构造函数。 但是,我希望调用另一个构造函数,它接受Party对象 如何在Razor或任何其他使用mvc的系统中做到这一点,请给出建议 我的代码: public O(Pobj) : this() { P= obj; } 视图: 使用P.M.O @模型IEnumerable @{ ViewBag.Title=“详细信息”; } @Html.Raw(“标题”) @使用(Html.BeginF
public O(Pobj)
: this()
{
P= obj;
}
视图:
使用P.M.O
@模型IEnumerable
@{
ViewBag.Title=“详细信息”;
}
@Html.Raw(“标题”)
@使用(Html.BeginForm(“编辑”、“O”、FormMethod.Post))
{
@foreach(模型中的var项目)
{
@TextBox(“C”,item.GetValForProp(“C”),新的{@class=“txt”})
@Html.TextBox(“N”,item.GetValForProp(“N”),新的{@class=“txt”})
@Html.TextBox(“D”,item.GetValForProp(“D”),新的{@class=“txt”})
编辑
}
}
除了上述仍未解决的问题外,我还有另一个问题
我的组织是另一个对象方的子组织。
因此,它将有一个属性party,其中包含对应于组织的party表详细信息(orgobj.party具有party对象)
当我点击编辑时,在我的控制器中,orgobj.Party为空,编辑不起作用。
异常:发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和从属对象之间不一致
请告知我是否正在做一些事情,或者如何在编辑控制器中对组织的绑定方建模???这有点棘手,但在某些情况下可以完成。根据您的代码,我假设在您启动组织对象时,将有一个Party对象可用 我能想到的解决这个问题的唯一方法是通过自定义ModelBinder。在下面的示例中,我假设您有一个传入的PartyId参数,我们可以使用该参数加载Party对象,然后启动Organization对象。您可以用不同的方式检索Party对象,但这并不重要。我只是展示一种使用ModelBinder的方法
public class OrganizationModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
// Try to get incoming PartyId
int partyId = 0;
ValueProviderResult value = bindingContext.ValueProvider.GetValue("PartyId");
if (value == null)
{
throw new Exception("Missing party id");
}
int.TryParse(value.AttemptedValue, out partyId);
// Load Party object from PartyId
DbContext db = new DbContext();
Party party = db.Parties.FirstOrDefault(p => p.PartyId == partyId);
if (party == null)
{
throw new Exception("Invalid party");
}
return new Organization(party);
// If you want to create an instance dynamically based upon the modelType
// passed in as an parameter then you'll have to use the following return
// line instead.
// return Activator.CreateInstance(modelType, party);
//
// If using this second return line you just have to add one
// ModelBinders.Binders.Add(...) line for each and every one of the models
// you want to use.
}
}
您还必须在Global.asax.cs
ModelBinders.Binders.Add(typeof(Organization), new OrganizationModelBinder());
这可能对你有用……但这完全取决于你想做什么。这有点棘手,但在某些情况下可以做到。根据您的代码,我假设在您启动组织对象时,将有一个Party对象可用 我能想到的解决这个问题的唯一方法是通过自定义ModelBinder。在下面的示例中,我假设您有一个传入的PartyId参数,我们可以使用该参数加载Party对象,然后启动Organization对象。您可以用不同的方式检索Party对象,但这并不重要。我只是展示一种使用ModelBinder的方法
public class OrganizationModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
// Try to get incoming PartyId
int partyId = 0;
ValueProviderResult value = bindingContext.ValueProvider.GetValue("PartyId");
if (value == null)
{
throw new Exception("Missing party id");
}
int.TryParse(value.AttemptedValue, out partyId);
// Load Party object from PartyId
DbContext db = new DbContext();
Party party = db.Parties.FirstOrDefault(p => p.PartyId == partyId);
if (party == null)
{
throw new Exception("Invalid party");
}
return new Organization(party);
// If you want to create an instance dynamically based upon the modelType
// passed in as an parameter then you'll have to use the following return
// line instead.
// return Activator.CreateInstance(modelType, party);
//
// If using this second return line you just have to add one
// ModelBinders.Binders.Add(...) line for each and every one of the models
// you want to use.
}
}
您还必须在Global.asax.cs
ModelBinders.Binders.Add(typeof(Organization), new OrganizationModelBinder());
这可能对你有用……但这一切都取决于你想做什么。有意思的问题,但我很确定你做不到。为什么不在构建之后设置Party属性呢?您需要为
组织注册一个自定义的ModelBinder
。然而,我仍然很好奇,你会把什么传递给期望参与方的构造函数呢?我可以把参与方对象传递给存在于组织对象(orgObj.Party)中的构造函数。你能建议如何使用ModelBinder吗?这有点紧急,如果有什么不同的处理方法,有人能帮我或给我一些建议吗?这个问题很有趣,但我很确定你们做不到。为什么不在构建之后设置Party属性呢?您需要为组织注册一个自定义的ModelBinder
。然而,我仍然很好奇,你会把什么传递给期望参与方的构造函数?我可以把参与方对象传递给存在于组织对象(orgObj.Party)中的构造函数。如何使用ModelBinder,你能提供建议吗?这有点紧急,有人能帮我吗,或者建议是否有任何不同的处理方式吗?Ohlin,谢谢你的回复。你能告诉我这个活页夹最好放在什么地方吗?比如在哪个项目中(我的d2admin拥有所有视图,我的partyweb拥有控制器,partybiz拥有模型)…这是一个很好的问题。它必须与将模型绑定到数据库的部分相关,在您的情况下,它将是partybiz。我可能错了,但我会先试试。嗯,谢谢。我试过活页夹,效果很好!!!最后一个问题,是否有可能对所有模型使用通用绑定器?我有超过20,30个模型,每个模型都有活页夹不是很好,不是吗?所有这些20-30个模型都需要一个派对对象吗?如果你想让它是通用的,它们必须是相同的。不是所有的时间都在聚会上。有些模型有不同的父对象。如果不是通用的,有没有其他方法处理所有模型?Ohlin,谢谢你的回复。你能告诉我放这个活页夹的最佳位置吗?比如在哪个项目中(我的d2admin拥有所有视图,我的partyweb拥有控制器,partybiz拥有模型)…这是一个很好的问题。它必须与将模型绑定到数据库的部分相关,在您的情况下,它将是partybiz。我可能错了,但我会先试试。嗯,谢谢。我试过活页夹,效果很好!!!最后一个问题,是否有可能对所有模型使用通用绑定器?我有超过20,30个模型,每个模型都有活页夹不是很好,不是吗?所有这些20-30个模型都需要一个派对对象吗?如果你希望它是通用的,它们必须是相同的,而不是Pa