如何将模型传递给某个局部视图

时间:2013-08-31 08:04:23

标签: asp.net-mvc asp.net-mvc-4

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

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

我在数据库中有5个表。其中一些有关系。这些表的一些字段应填入部分ONE,一些应填写部分TWO,并且... 我把这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个部分视图的基本页面吗?

2 个答案:

答案 0 :(得分:2)

  
      
  1. 您不应将模型(与您的业务层相关联)传递给您查看。

  2.   
  3. 您的意见可能仅仅来自于编写/维护较少代码的愿望。因此,很明显为什么要创建所有的新视图模型   时间会导致更多的代码。

  4.   
  5. 在有意义的情况下使用视图模型的原因(这种情况发生在我身上),这可以让您验证视图模型   与基于属性的验证方案的模型不同。

  6.   
  7. 查看模型对象可用于帮助整形和格式化数据。需要以特定方式格式化日期或金钱值吗?你可以做到这一点   视图,控制器或视图模型中的视图。如果你只是   做的是格式化等,你可以做一个视图模型的情况   是最好的去处。

  8.   
  9. 通过使用视图模型,您可以使用一种很好的机制来展平并简化视图处理的内容。这也将过滤掉可以做的事情   在intellisense中可以看到,所以如果你有不同的人在发展   模型比那些在视图上工作的模型,创建一个简单的视图   模型可以让那些刚刚处理UI的人更容易。

  10.   

Conslusion :视图模型应该只包含相应视图所需的属性。

Reference

查看模型

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

答案 1 :(得分: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());
    }