如何在 ASP.NET MVC 中的同一网页上使用两个不同的模型显示两个视图

How to display two views using two different models on the same web page in ASP.NET MVC

提问人:zeifi 提问时间:9/11/2015 最后编辑:marc_szeifi 更新时间:9/11/2015 访问量:469

问:

下面是控制器和视图的代码。我想在 MVC ASP.NET 同一网页上显示这两个视图。如何实现这一目标?

控制器:

public ActionResult LetterList()
{
   LetterPage.Models.ModelView obj = new LetterPage.Models.ModelView();

   obj.letterDetail = new List<LetterList>()
        {
        new LetterList() { ListId = "1", ListName =  "A" },
        new LetterList() { ListId = "2",  ListName= "B" },
        new LetterList() { ListId = "3",  ListName= "C" },
        new LetterList() { ListId ="4",  ListName= "D"}
        };

    return View(obj);
}

public ActionResult Showimage(string ListId)
{
        Post post = new Post();
        var letterList = post.FindByletter_Id(ListId);

         return View(letterList);
}

LetterList 视图

     @model LetterPage.Models.ModelView

   <div>
   @{
    foreach (var item in Model.letterDetail)
    {
        <div>
            <a href="/Home/[email protected]">@item.ListName</a>
        </div>
      }
     }
     </div>

ShowImage 视图:

    @model IList< LetterPage.Models.hurf_e_tahaji>

     @{
     ViewBag.Title = "ShowImage";
     }

   <table class="table">
      <tr>
        <th>
     </th>
     </tr>

    @foreach (var item in Model)
    {

    <tr>
        <td>
            <img src="@Url.Content("item.Letter_Pic") "/>
        </td>
      </tr>
    }

    </table>

当我将这些视图创建为分部视图并将它们呈现到另一个视图中时,模型的循环上发生了异常。Foreach

ASP.NET-MVC 格式

评论

0赞 Sirwan Afifi 9/11/2015
可以使用 PartialViews
1赞 ethorn10 9/11/2015
您可以为此特定视图创建一个新模型,该模型具有两个属性:letterlist 模型和 showimage 模型。在控制器操作中填充两个模型。
0赞 9/11/2015
使用结合了这两个属性的视图模型的替代方法是在视图中使用(这将包括该方法生成的部分视图)@Html.Action("LetterList")Showimage.cshtmlLetterList()
0赞 zeifi 10/13/2015
@StephenMuecke感谢您帮助我,它工作正常。我想问另一个问题。首次加载页面时,除了字母列表外,不显示任何内容。如何设置默认选择的第一个列表项,以便在加载页面时,其所尊重的图片也与列表一起显示,而无需选择任何列表项。请帮忙。
0赞 10/13/2015
你将不得不提出一个新问题,包括你的代码,包括你的代码(注释不是用来问新问题的)

答:

0赞 Sirwan Afifi 9/11/2015 #1

您可以使用 PartialView:

    [HttpPost]
    public PartialViewResult LetterList()
    {
        if (Request.IsAjaxRequest())
        {
            LetterPage.Models.ModelView obj = new    LetterPage.Models.ModelView();
            obj.letterDetail = new List<LetterList>()
            {
                new LetterList() { ListId = "1", ListName =  "A" },
                new LetterList() { ListId = "2",  ListName= "B" },
                new LetterList() { ListId = "3",  ListName= "C" },
                new LetterList() { ListId ="4",  ListName= "D"}
            };
            return PartialView(obj);
        }
        return null;
    }
    [HttpPost]
    public PartialViewResult Showimage(string ListId)
    {
        if (Request.IsAjaxRequest())
        {
            Post post = new Post();
            var letterList = post.FindByletter_Id(ListId);
            return PartialView(letterList);
        }
        return null;
    }

然后你必须定义你的部分视图(就像你发布的代码),并在主视图中:

<div class="LetterList">
   <img src="@Url.Content("~/Content/Images/arrow-spinner-blue.gif")" alt="loading" />
</div>
<div class="Showimage">
   <img src="@Url.Content("~/Content/Images/arrow-spinner-blue.gif")" alt="loading" />
</div>
@section Scripts
{

    <script type="text/javascript">
        $(function () {
            $.post('/Home/LetterList', function(data) {
                $('.LetterList').html(data);
            });
            $.post('/Home/Showimage/' + ListId, function(data) {
                $('.Showimage').html(data);
            });
        });
    </script>
}