MVC,查看语法,变量到模型的一部分

时间:2014-07-09 08:54:07

标签: asp.net-mvc

我不知道如何搜索这个,因为我不确定它会被称为

我有一个像这样的模型

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>

感谢

2 个答案:

答案 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>
相关问题