0

我有一个包含 3 个部分视图的页面。

    ...
    .
    .
      @Html.Action("one" , "Home")
      @Html.Action("two" , "Home")
      @Html.Action("three" , "Home")
    .
    .
    .

我在数据库中有 5 个表。其中一些有关系。这些表的某些字段应填写部分 ONE,有些字段应填写部分 2,并且...我将这 5 个表组合在一起。

    public class ViewModelX
    {


    public Nullable<long> id_sport { get; set; }
    public Nullable<long> id_city { get; set; }
    public Nullable<long> id_spend { get; set; }
    public Nullable<long> id_profile { get; set; }
    public Nullable<int> cost { get; set; }
    public Nullable<long> idFactor { get; set; }
    public Nullable<long> Idpage { get; set; }

    public string username { get; set; }
    public string Namestar { get; set; }
    public string Lnamestar { get; set; }
    public string Tell { get; set; }
    public string cell { get; set; }
    public string Address { get; set; }
    public string Code { get; set; }



    public string username_s { get; set; }
    public Nullable<long> id_s { get; set; }
    public Nullable<long> id_mark{ get; set; }

     }

现在我应该把这个模型传递给每个部分吗?我也应该将它传递给包含这 3 个部分视图的基本页面吗?

4

2 回答 2

2
  1. 您不应该将模型(与您的业务层关联)传递给您的视图。

  2. 您的意见可能只是出于编写/维护更少代码的愿望。所以,很明显为什么总是创建新的视图模型会导致更多的代码。

  3. 在有意义时使用视图模型的原因(这发生在我身上),这使您可以在基于属性的验证场景中以不同于模型的方式验证您的视图模型。

  4. 视图模型对象可用于帮助塑造和格式化数据。需要以特定方式格式化的日期或货币值?您可以在视图、控制器或视图模型中执行此操作。如果您所做的只是格式化等,您可以证明视图模型是执行此操作的最佳位置。

  5. 通过使用视图模型,您有一个很好的机制来展平和简化视图处理的内容。这也将过滤掉智能感知中可以看到的内容,因此如果开发模型的人与开发视图的人不同,那么创建一个简单的视图模型可以让那些只处理 UI 的人更容易。

结论:视图模型应仅包含其相应视图所需的那些属性。

参考

查看模型

public class PartialViewModel1
{
    [Display(Name = "Name")]
    public String Name { get; set; }
}

public class PartialViewModel2
{
    [Display(Name = "id")]
    public int id { get; set; }
}

public class PartialViewModel3
{
    [Display(Name = "DOB")]
    public DateTime DOB { get; set; }
}

控制器动作方法

[HttpGet]
public PartialViewResult PartialView1()
{
    return PartialView(new PartialViewModel1());
}

[HttpGet]
public PartialViewResult PartialView2()
{
    return PartialView(new PartialViewModel2());
}

[HttpGet]
public PartialViewResult PartialView3()
{
    return PartialView(new PartialViewModel3());
}

局部视图 - 1

@model Practise.Controllers.PartialViewModel1
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
    @Html.EditorForModel();
    <input type="submit" name="Submit" value="Submit" />
}

局部视图 - 2

@model Practise.Controllers.PartialViewModel2
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
    @Html.EditorForModel();
    <input type="submit" name="Submit" value="Submit" />
}

局部视图 - 3

@model Practise.Controllers.PartialViewModel3
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
    @Html.EditorForModel();
    <input type="submit" name="Submit" value="Submit" />
}

看法

@Html.Action("PartialView1", "Account", new { area = "AreaName" })
@Html.Action("PartialView2", "Account", new { area = "AreaName" })
@Html.Action("PartialView3", "Account", new { area = "AreaName" })
于 2013-08-31T12:01:00.420 回答
0

我以前遇到过你的问题。如果您的局部视图应该获得一些数据,请使用@Html.RenderAction(),如下所示:

您的部分视图 ( _theLastPost.cshtml ):

@model IEnumerable<test1.Models.Post>

    @foreach (var item in Model)
    {
        <h2>
            @item.Title
        </h2>
        <p>
            @item.Content
        </p>
    }

在您的Index.cshtml中嵌入部分视图:

@{ Html.RenderAction("_theLastPost"); }

你应该有一个与局部视图同名的控制器,如下所示:

public PartialViewResult _theLastPost()
    {
        var a = (from c in db.Posts
                 orderby c.ID_Post descending
                 select c);
        return PartialView(a.ToList());
    }
于 2015-12-11T15:22:38.267 回答