我不知道如何搜索这个,因为我不确定它会被称为
我有一个像这样的模型
class MyModel
{
public Firstbit {get; set; }
public Secondbit {get; set; }
}
在我的视图中,我有类似的东西
<div>
@Html.TextBoxFor(x => x.Firstbit.A)
@Html.TextBoxFor(x => x.Firstbit.B)
@Html.TextBoxFor(x => x.Firstbit.C)
</div>
<div>
@Html.TextBoxFor(x => x.Secondbit.A)
@Html.TextBoxFor(x => x.Secondbit.B)
@Html.TextBoxFor(x => x.Secondbit.C)
</div>
除了使用partials或分割文件之外,我可以使用局部变量来保存每次写入FirstBit / secondbit吗?即。
<div>
@{ var a = @Model.Firstbit; }
// somehow address 'a' below?
@Html.TextBoxFor(x => x.A)
@Html.TextBoxFor(x => x.B)
@Html.TextBoxFor(x => x.C)
</div>
感谢
答案 0 :(得分:4)
可能不是。你甚至不想这样做。
对于初学者来说,每当你必须在视图中声明一个变量时,你可能做错了什么。视图应该只绑定到他们的支持模型,最多只能使用一些条件或循环逻辑。
退后一步,问......这会真正实现什么?您可以节省一些按键,但是您要使代码不那么标准,也更难以遵循。击键不是困难的部分。在IDE中键入代码并不是困难的部分。稍后支持该代码(或者在您编写并忘记它之后由其他人支持或者自己支持)是困难的部分。
保持代码简单,易于阅读,易于理解,并清楚表达其所做的事情。此代码准确地告诉您它正在做什么:
@Html.TextBoxFor(x => x.Secondbit.C)
它为模型的C
属性的Secondbit
属性创建了一个文本框。
现在,如果模型开始拥有太多属性并且视图开始变得太大,那么可以的一件事情(根据情况可能 >)do将您的视图拆分为多个局部视图,每个视图都解决大型复合模型中的特定模型。
例如,您可以创建一个部分视图,专门构建标记以查看和/或编辑Firstbit
类型的模型。然后在父视图中,您将该模型实例委托给局部视图:
@Html.Partial("FirstbitView", Model.Firstbit)
毕竟,由于模型是较小模型的组合,因此视图是较小视图的组合是有意义的。这将代码组织成离散的组件,而不是单个组件上的某种简写符号。
答案 1 :(得分:0)
您可以为其创建部分视图或显示模板。 为避免代码重复,您可以定义一个接口,并将其用作模型。
这里是使用局部视图的示例。首先,我们定义并实现一个Ibit接口
public class MyModel
{
public Firstbit Firstbit { get; set; }
public Secondbit Secondbit { get; set; }
}
public interface Ibit
{
string A { get; set; }
string B { get; set; }
string C { get; set; }
}
public class Firstbit : Ibit
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
public class Secondbit : Ibit
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
然后我们使用此接口作为局部视图内的模型(ex IBitPartial.cshtml):
@model WebApplicationMVC.Model.Ibit
<div>
@Html.TextBoxFor(model => model.A)
@Html.TextBoxFor(model => model.B)
@Html.TextBoxFor(model => model.C)
</div>
我们可以从主视图中使用它:
@model WebApplicationMVC.Model.MyModel
<div>
@Html.Partial("IBitPartial", Model.Firstbit)
@Html.Partial("IBitPartial", Model.Secondbit)
</div>
<h2>IBitMain</h2>