【问题标题】:how can pass a model to some partial view如何将模型传递给某些局部视图
【发布时间】:2013-08-31 08:04:23
【问题描述】:

我有一个包含 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 个部分视图的 基本页面

【问题讨论】:

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


    【解决方案1】:
    1. 您不应将模型(与您的业务层关联)传递给您的视图。

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

    3. 在有意义的情况下使用视图模型的原因(这发生在我身上),这允许您验证您的视图模型 与基于属性的验证场景的模型不同。

    4. 视图模型对象可用于帮助塑造和格式化数据。需要以特定方式格式化的日期或货币值?你可以这样做 视图、控制器或视图模型中。如果你都是 做的是格式化等,你可以证明视图模型 是最好的地方。

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

    结论:视图模型应该只包含对应视图所需的那些属性。

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

    【讨论】:

    • 但在我的页面中我需要所有属性。如何在 3 个局部视图中使用不同的视图模型,并在最后将它们收集到我的页面中?
    • @niknaz :请检查更新。 :) 我认为,当有人帮助你时,你从来没有做过投票。每当您觉得自己的问题得到妥善和仔细的解决时,您应该通过投票和接受他们的回答来鼓励其他社区成员。希望你会发现它很有用。谢谢。
    • PKKG 谢谢。请原谅我。我也有问题。我不知道如何将三个模型字段传递到我的主页(我的意思是它的动作)。我想逐步填充三个部分视图。并将部分 1 的结果发送到 2。部分 3 的结尾,应将整个填充的属性发送到我的主页(http 帖子)。请帮助我并原谅我。
    【解决方案2】:

    我之前遇到过你的问题。 如果您的局部视图应该获得一些数据,请使用 @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"); }
    

    你应该有一个 controllerpartial view 同名,如下所示:

    public PartialViewResult _theLastPost()
        {
            var a = (from c in db.Posts
                     orderby c.ID_Post descending
                     select c);
            return PartialView(a.ToList());
        }
    

    【讨论】:

      猜你喜欢
      • 2014-02-05
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多