【问题标题】:Multiple Models Binding Falied (MVC 4)多个模型绑定失败(MVC 4)
【发布时间】:2013-06-23 18:24:41
【问题描述】:

我正在尝试从多个模型中获取数据到我的视图中,但每次我遇到错误时,我都会尝试很多方法来解决这个问题,但我失败了......请帮我解决这个问题......我正在发布我的代码..n 我为此创建了视图模型

这是一个索引视图

@model Stubify.Models.ViewModels.TimeLine

   <div class="media social-box social-composer ">
                <a class="pull-left social-users-avatars" href="#">
                    <img class="media-object" width="55" height="55" src="../Content/assets/img/avatar-55.png" alt="Julio Marquez">
                </a>
                <div class="media-body social-body">
                    @foreach (var item in Model.User.Take(1))
                    {
                        <textarea id="new_message" name="new_message" class="textarea span12" placeholder="What's happening, @item.FullName?" cols="10"></textarea>
                    }

                    <div class="social-footer">
                        <div class="btn-group">
                            <a class="btn" data-original-title=""><i class="icon-map-marker"></i></a>
                            <a class="btn" data-original-title=""><i class="icon-camera"></i></a>
                        </div>
                        <button class="btn btn-primary pull-right" type="button">Post</button>
                    </div>
                </div>
            </div>


            <div id="NewsFeeds">
                @Html.Partial("_NewsFeeds", Model)
            </div>
            <div id="loading"></div>

这是一个视图模型

public class TimeLine
{
    public virtual IEnumerable<Users> User { get; set; }
    public virtual IEnumerable<UsersPosts> UsersPost { get; set; }
}

这是部分视图

  @model Stubify.Models.ViewModels.TimeLine
@foreach(var item in Model)
{
<div class="social-share-image">
            <img src="../Content/assets/img/gallery/sunset.jpg" alt="Sun Set">
            <div class="social-share-image-text">
                <h4>@item.UserId</h4>
                <p><strong>@item.PostContent!</strong><small> @item.Date <i class="icon-globe"></i></small></p>
            </div>
        </div>
}

这是一个控制器

public ActionResult Index(string searchTerm = null, int? id = 0)
    {
        var viewModel = new TimeLine();

        var page = id ?? 0;

        viewModel.User = db.Users.OrderByDescending(u => u.Id)
            .Where(u => searchTerm == null || u.FullName.ToLower().Contains(searchTerm)).Take(records);
        if (Request.IsAjaxRequest())
        {
            return PartialView("_NewsFeeds", GetPaginatedProducts(page));
        }
        return View(viewModel);
    }

请帮帮我

【问题讨论】:

  • 您遇到了什么错误/症状?仅仅陈述“但我失败了” 并不是一个好问题。
  • @HenkHolterman 我想从两个模型获取数据到单个视图。错误是“对象引用未设置为对象的实例。” at 局部视图中的循环,如果我删除局部视图,代码运行正确但不呈现局部视图

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


【解决方案1】:

最明显的问题是,当您在 Controller 中填写 viewModel.User = ... 时,没有填写 viewModel.UsersPost = ... 的代码,因此将是 null

我注意到这部分永远无法工作:

@model Stubify.Models.ViewModels.TimeLine
@foreach(var item in Model)
{
   ...
}

TimeLine 不是一个集合(尽管它包含 2 个集合)。

这可能是你的意思:

@model IEnumerable<Stubify.Models.Models.User>  // my best guess
@foreach(var item in Model)
{
   ...
}

【讨论】:

  • 亨克是正确的。您传递给视图的模型是单个对象,而不是集合。您可以考虑将其更改为(Model.Users 中的变量项)。
  • @mtm927 我已经通过了这个,但这不是针对用户类的,这是针对用户帖子类的,主要的是来自用户类..我想从用户类中获取名称并从用户帖子中发布内容,我想现在你们更好地理解了
  • 是的,它不是一个集合,它包含两个集合 User 和 UsersPosts
  • @HenkHolterman 我读过你能告诉我如何在控制器中绑定 userpost 视图模型吗?
  • 同你绑定用户列表。它们在 ViewModel 中是相同的,需要类似的处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多