如何在 ASP.NET MVC 的剃刀视图中使用多个单独的模型?

尼尔斯斯坦登

我目前正在做一个项目,我想在其中显示 2 个具有每个不同模型的 webgrid 表。我发现很多教程如何在常规 MVC 视图中使用多个模型,但它在 Razor 视图中不起作用。我现在有点坚持这个。

到目前为止我尝试过的 - 1

控制器:

我尝试使用动态 ExpandObject 向此视图添加两个列表,查看代码:

public ActionResult Index(int page = 1, string sortApi = "ApiName",string sortCompany = "CompanyName", string sortdir = "asc", string search = "")
{
        int pageSize = 13;
        int totalRecords = 0;
        if (page < 1)
        {
            page = 1;
        }
        int skip = (page * pageSize) - pageSize;
        ViewBag.TotalRows = totalRecords;
        ViewBag.search = search;

        //Dynamic ExpandObject
        var dataApiRedirects = getRedirects(search, sortApi, sortdir, skip, pageSize, out totalRecords);
        var dataCompanies = getCompanies(search, sortCompany, sortdir, skip, pageSize, out totalRecords);
        dynamic mymodel = new ExpandoObject();
        mymodel.ApiList = dataApiRedirects;
        mymodel.CompanyList = dataCompanies;

        return View(mymodel);
}

看法:

<div class="col-sm-1 d-flex align-items-stretch" style="padding-top: 5%;">
                <div class="form-group">
                    <a href="#" class="btn btn-primary" data-toggle="modal" data-target="#myModal">+API</a>
                </div>
                <!--MODAL-->
                <div class="modal fade" id="myModal" >
                    <div class="modal-dialog" style="width: 20%;">
                        <div class="modal-content">
                            <div class="modal-header">
                                <a href="#" class="close" data-dismiss="modal">&times;</a>
                                <h3 class="modal-title">Add API</h3>
                            </div>
                            <div class="modal-body">
                                <form id="myForm">
                                    <p>@Html.TextBoxFor(Model.ApiList.ApiName, new { @class = "form-control", @placeholder = "Name" })</p>
                                    <p>@Html.TextBoxFor(model => model.ApiList.First().Company.CompanyName, new { @class = "form-control", @placeholder = "Company" })</p>
                                    <p>@Html.TextBoxFor(model => model.ApiList.First().ApiURL2, new { @class = "form-control", @placeholder = "URL" })</p>
                                </form>
                            </div>
                            <div class="modal-footer">
                                <a href="#" class="btn btn-default" data-dismiss="modal">Cancel</a>
                                <input type="reset" value="Submit" class="btn btn-success" id="btnSubmit" />
                            </div>
                        </div>
                    </div>
                </div>
 </div>

但是,当我想在我的模式中创建文本框时,我收到以下错误:

在此处输入图片说明

到目前为止我尝试过的 - 2

我也尝试过使用 ViewBag:

控制器代码:

public ActionResult Index(int page = 1, string sortApi = "ApiName",string sortCompany = "CompanyName", string sortdir = "asc", string search = "")
{
        int pageSize = 13;
        int totalRecords = 0;
        if (page < 1)
        {
            page = 1;
        }
        int skip = (page * pageSize) - pageSize;

        var dataApiRedirects = getRedirects(search, sortApi, sortdir, skip, pageSize, out totalRecords);
        var dataCompanies = getCompanies(search, sortCompany, sortdir, skip, pageSize, out totalRecords);
        dynamic mymodel = new ExpandoObject();
        mymodel.ApiList = dataApiRedirects;
        mymodel.CompanyList = dataCompanies;

        //Model 1 data
        ViewBag.CompaniesList = dataCompanies;


        ViewBag.TotalRows = totalRecords;
        ViewBag.search = search;

        //Model 2 data
        return View(mymodel);
}

HTML代码:

var getlist = ViewBag.CompaniesList as IEnumerable<APIBrokerFrontend.Models.Company>;

<div class="modal fade" id="myModalCompany">
                <div class="modal-dialog" style="width: 20%;">
                    <div class="modal-content">
                        <div class="modal-header">
                            <a href="#" class="close" data-dismiss="modal">&times;</a>
                            <h3 class="modal-title">Add Company</h3>
                        </div>
                        <div class="modal-body">
                            <form id="myForm">
                                @<p>@Html.TextBoxFor(getlist.First().CompanyName, new { @class = "form-control", @placeholder = "Company Name" })</p>
                            </form>
                        </div>
                        <div class="modal-footer">
                            <a href="#" class="btn btn-default" data-dismiss="modal">Cancel</a>
                            <input type="reset" value="Submit" class="btn btn-success" id="btnSubmit" />
                        </div>
                    </div>
                </div>
</div>

使用 ViewBag 我收到以下错误:

在此处输入图片说明

有没有人对此有解决方案?

提前致谢!

普拉萨德

问题是使用了类似的操作First()此处解释使用动态模型的正确方法请更正您的代码以使用索引 0(例如ApiList[0])来获取第一个元素而不是First().

使用动态的示例:

看法:

@using Sample;

@model dynamic

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

<a href="~/Default1">@Model.Blogs[0].MyCompany.CompanyName</a>

控制器:

public class Company
{
    public string CompanyName { get; set; }
}

public class Blog
{
    public string Name;
    public string URL;
    public Company MyCompany;
}

public class MyModel
{
    public List<Blog> Blogs { get; set; }
}

public class Default1Controller : Controller
{
 public class Company
{
    public string CompanyName { get; set; }
}

public class Blog
{
    public string Name;
    public string URL;
    public Company MyCompany;
}

public class MyModel
{
    public List<Blog> Blogs { get; set; }
}

public class Default1Controller : Controller
{
    List<Blog> topBlogs = new List<Blog>
      { 
          new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/", MyCompany = new Company{
              CompanyName = "Microsoft"
          }},
          new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/", MyCompany = new Company{
              CompanyName = "Microsoft"
          }},
          new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc", MyCompany = new Company{
              CompanyName = "Microsoft"
          }}
      };

    //
    // GET: /Default1/

    public ActionResult Index()
    {
        var myModel = new MyModel();
        myModel.Blogs = topBlogs;

        return View(myModel);
    }

}

希望有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 ASP.NET Core MVC 剃刀视图中使用脚本标记

如何在单视图 asp.net core 2.2 mvc 中使用多个模型?

如何在asp.net MVC的模型视图中使用foreach循环打印列表或数组的数据

如何使用ASP.Net MVC在Razor视图中使用“输入”处理多个按钮?

使用模型呈现的视图中的ASP.NET MVC剃刀图

如何在ASP.NET MVC视图中使用@page CSS

如何在 cshtml 视图中使用 Asp .NET Core MVC 中的变量?

如何在asp.net MVC视图中使用unity3d webgl内容?

如何在MVC Razor视图中使用/显示Asp.net数据列表

如何在ASP.NET MVC中使用部分视图模型

如何在asp.net MVC视图中有条件地设置模型?

如何在ASP.NET MVC4剃刀视图中可视化动态类型列

如何在剃刀视图中将格鲁吉亚日期从数据库转换为波斯日期?-Asp.net MVC

使用asp.net mvc时如何在一个视图中显示多个(4)表?

如何在ASP.NET MVC中使用DownloadProgressChangedEventHandler?

如何在ASP.NET MVC中使用AngularJS?

如何在 ASP.NET MVC 5 中使用 applozic

如何在ASP.NET MVC中使用ViewModels?

如何在ASP NET MVC 6中更新模型?

如何在ASP.Net MVC中部署模型更新

如何在ASP .Net Core 3.1 MVC应用程序中调试JavaScript(剃刀视图-* .cshtml)?

如何在 ASP.NET 中使用视图模型?

如何在 ASP.Net MVC 中使用多维数组初始化模型?

如何在 ASP.NET MVC 中使用 Ajax 调用刷新局部视图?

在部分视图中使用分页,asp.net mvc

如何在ASP.NET MVC中使用选择列表返回多个值?

如何在ASP.NET MVC中使用多个提交按钮

如何在 ASP.NET MVC 中使用实体框架连接两个或多个表?

在ASP.NET MVC中使用Razor的CSS视图模型