Как распечатать PartialView - PullRequest
0 голосов
/ 28 мая 2019

Я искал это и пытался исправить в течение нескольких дней, но безуспешно. Что неправильно я делаю в этом коде? Я хочу напечатать _Champions и _SearchEngine как PartialView в Home/Index, но это показывает ошибку.

Мой домашний контроллер

 public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
[HttpGet]
        public ActionResult _SearchEngine()
        {                  
            SearchLeagueModel searchLeagueModel = new SearchLeagueModel();
            searchLeagueModel.MainSelector = "champions";          
            return PartialView("_SearchEngine", searchLeagueModel);
        }
        public ActionResult _SearchEngine(SearchLeagueModel searchLeagueModel)
        {
            if (searchLeagueModel.MainSelector == "champions")
            {
                return RedirectToAction("_Champions", searchLeagueModel);                       
            }
            else return View();
        }
        [HttpPost]
        public ActionResult _Champions(SearchLeagueModel searchLeagueModel)
        {
            string chooser = searchLeagueModel.MainSelector;
            string selector;
            if (searchLeagueModel.MainSelector != null)
            {
                selector = "filter[name]=" + searchLeagueModel.MainSelector;
            }
            else
            {
                selector = "";
            }
                WebRequest request = WebRequest.Create("https://api.pandascore.co/lol/" + chooser + "?" + selector + "&token=mytoken);
                WebResponse response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                string responseFromServer = reader.ReadToEnd();
                List<ChampionsModel> champions = JsonConvert.DeserializeObject<List<ChampionsModel>>(responseFromServer);
                return PartialView("_Champions", champions);
        }
//other views
}

Мой IndexModelView

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace LeagueAPI.Models
{
    public class IndexModelView
    {
        public IndexModelView()
        {
            ChampionsList = new ChampionsModel();
            Searcher = new SearchLeagueModel();
        }
        public ChampionsModel ChampionsList { get; set; }
        public SearchLeagueModel Searcher { get; set; }
    }

    public class ChampionsModel
    {
        public List<string> videogame_versions { get; set; }
        public double spellblockperlevel { get; set; }
        public double spellblock { get; set; }
        public string name { get; set; }
        public double mpregenperlevel { get; set; }
        public double mpregen { get; set; }
        public double mpperlevel { get; set; }
        public double mp { get; set; }
        public double movespeed { get; set; }
        public string image_url { get; set; }
        public int id { get; set; }
        public double hpregenperlevel { get; set; }
        public double hpregen { get; set; }
        public double hpperlevel { get; set; }
        public double hp { get; set; }
        public double critperlevel { get; set; }
        public double crit { get; set; }
        public string big_image_url { get; set; }
        public double attackspeedperlevel { get; set; }
        public object attackspeedoffset { get; set; }
        public double attackrange { get; set; }
        public double attackdamageperlevel { get; set; }
        public double attackdamage { get; set; }
        public double armorperlevel { get; set; }
        public double armor { get; set; }
    }
}

Мой _Champions.cshtml PartialView (сделан как PartialView)

@using LeagueAPI.Models
@model System.Collections.Generic.List<ChampionsModel>
<fieldset>
    <div class="d-flex p-3 w-auto h-auto">
        @foreach (var element in @Model)
        {
            <div class="p-3 flex-lg-wrap">
                <div class="card p-2" style="width: 15rem ;">
                    <img class="card-img-top" src="@Html.DisplayFor(model => element.big_image_url)">
                    <div class="card-body p-0 m-0">
                        <h5 class="card-title p-0 m-0 text-center">@Html.DisplayFor(model => element.name)</h5>
                        <p class="card-text p-0 m-0">DMG/LVL: @Html.DisplayFor(model => element.attackdamageperlevel)</p>
                        <p class="card-text p-0 m-0">ARMOR/LVL: @Html.DisplayFor(model => element.armorperlevel)</p>
                        <p class="card-text p-0 m-0">MOVEMENT SPEED: @Html.DisplayFor(model => element.movespeed)</p>
                        <p class="card-text p-0 m-0">ATTACK RANGE: @Html.DisplayFor(model => element.attackrange)</p>
                        <a href="/Home/Details"
                           class="btn btn-primary m-1 "
                           OnClick="GreetingBtn_Click">More details</a>
                    </div>
                </div>
            </div>
        }
    </div>
</fieldset>

Индекс

@model LeagueAPI.Models.IndexModelView

@Html.Action("_SearchEngine", Model.Searcher)
@Html.Action("_Champions", Model.ChampionsList)

Все остальное выглядит стандартно, в _Layout у меня @RenderBody() Мой второй вопрос о _Champions Controller. Почему, когда я помещаю IndexModelView indexModelView = new IndexModelView() в качестве параметра и вносим необходимые изменения в код этого ActionResult, MainSelector в этом случае является нулевым. Я все еще учусь, если вы можете объяснить, что здесь не так, я буду благодарен. веселит

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Я бы сказал, что вместо ActionResults лучше использовать PartialViewResult для обоих действий _Champions и _SearchEngine

[HttpPost]
public PartialViewResult _Champions(SearchLeagueModel searchLeagueModel)
{
       return PartialView("_Champions", champions);
}

И затем из представления индекса. Отобразите эти действия , как показано ниже:

@model LeagueAPI.Models.IndexModelView
<div>
@Html.RenderAction("_Champions");
@Html.RenderAction("_SearchEngine");
</div>
0 голосов
/ 28 мая 2019

Попробуйте этот сценарий Java: -

<script>
function printContent(el){
    var restorepage = document.body.innerHTML;
    var printcontent = document.getElementById(el).innerHTML;
    document.body.innerHTML = printcontent;
    window.print();
    document.body.innerHTML = restorepage;
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...