Как передать данные между представлениями и контроллером? - PullRequest
0 голосов
/ 27 июня 2018

Это наш индекс дома:

@model ELearning.Data.ELearningEgitimDTO
@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
    @if (TempData["message"] != null)
    {
        <div class="alert alert-info" role="alert">@TempData["message"]</div>
    }
    <div>
        <div>
            @if (Model.EgitimTuru == 5)
            {
                <h1>Yangın Eğitimi</h1>
            }

            <table class="table table-responsive">
                <tr>
                    <td width="20%">Şirket Adı:</td>
                    <td width="80%">@Model.Name</td>
                </tr>
                <tr>
                    <td>Eğitimi Veren:</td>
                    <td>@Model.PersonelAdi</td>
                </tr>
                <tr>
                    <td>Eğitim Tarihi:</td>
                    <td>@Model.Tarih</td>
                </tr>
            </table>
        </div>
        <div>
            <table class="table table-responsive">
                <tr>
                    <td>Eğitim Konuları:</td>
                </tr>
                @foreach (var konu in Model.Adi)
                {
                    <tr>
                        <td><ul><li>@konu</li></ul></td>
                    </tr>
                }

            </table>
        </div>
    </div>
    <p class="text-right"><button onclick="getStartDate()" class="btn btn-primary btn-lg ">Eğitime Başla »</button></p>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"></script>

    <script type="text/javascript">

        function getStartDate() {
            
            $.post("/Video/GetStartDate",
                {
                    PerNr: @Model.PerNr,
                    StartDate: "",
                    EndDate: "",
                    EgitimFilesId: @Model.FileId
                });
        }
    </script>
</div>

Это индекс видео:

@model WebApplication3.Models.VideoLogsModel
@{
    ViewBag.Title = "Video Page";
}

<div class="jumbotron">
    <div>Eğitime başlanan zaman:</div>
    <div id="startdate"></div>
    <div class="col-md-12 text-center">
        <video controls controlslist="nodownload" id="videoPlayer" width: 100% height: auto>
            <source src="~/Video/GetVideo" type="video/mp4">
        </video>
    </div>
    <br />
    <div class="text-right">
        <p id="button" onclick="egitimiBitir()" class="btn btn-danger btn-lg ">Eğitimi Bitir</p>
    </div>
    <script type="text/javascript">
        var vid = document.getElementById("videoPlayer");
        var button = document.getElementById("button");

        if (vid.played) {
            setInterval(function () { vid.pause(); }, 30000);
        }
        vid.addEventListener("ended", function() {
            button.className = "btn btn-success btn-lg "
        });

        function egitimiBitir() {

            if (vid.ended) {
                $.post("/Video/GetEndDate",
                    {
                        PerNr: @Model.PerNr,
                        StartDate= "",
                        EndDate: "",
                        EgitimFile sId: @Model.EgitimFilesId
                    });
            }
            else {
                document.getElementById("message").innerHTML = "Video tamamlanmadan eğitimi bitiremezsiniz.."
            }
        }
    </script>
</div>

Это наша основная модель:

public class ELearningEgitimDTO
{
    public ELearningEgitimDTO() { }
    public ELearningEgitimDTO(string PerNr, int ID) 
    {
        this.ID = ID;
        this.PerNr = PerNr;
    }

    public int ID { get; set; }
    public string PerNr { get; set; }//katılımcıID
    public string Name { get; set; }//şirket adı
    public int EgitimTuru { get; set; }
    public DateTime Tarih { get; set; }//egitim tarihi
    public string PersonelAdi { get; set; } // eğitimi veren

    public int FileId { get; set; }
    public string FileName { get; set; }
    public string[] Adi { get; set; }
}

Это наша модель:

public class VideoLogsModel
{
    public int EgitimFilesId { get; set; }
    public int PerNr { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

}

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

public class HomeController : Controller
{
    public ActionResult Index(int EgitimId=4, string PerNr="2")
    {
        ELearningService service = new ELearningService();
        ELearningEgitimDTO egitim = new ELearningEgitimDTO(PerNr, EgitimId);
        return View(service.getInfo(egitim));   //eğitim bilgileri istenirken egitimId ve egitim kullanıcıdaki  eğitmenin perNr si verilmeli!!
    }
}

Это наш видеоконтроллер:

public class VideoController : Controller
{ 

    public ActionResult Index(VideoLogsModel model)
    {
        return View(model);
    }
    public ActionResult GetVideo()
    {
        var memoryStream = new MemoryStream(System.IO.File.ReadAllBytes(@"C:\Users\cyare\Desktop\videoplayback.mp4"));
        //byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\melik.DESKTOP-LQQAB68\Desktop\videoplayback.mp4");
        //System.IO.File.WriteAllBytes(@"C:\Users\melik.DESKTOP-LQQAB68\Desktop\videoplayback.mp4", bytes);
        return new FileStreamResult(memoryStream, "video/mp4");
    }
    /* [HttpPost]
     public ActionResult GetStartEndDate(VideoLogsModel logs)
     {
         DateTime startDate = logs.StartDate; //database de uygun tabloya yazılır
         return RedirectToAction("Index", "Video");
     }*/
    [HttpPost]
    public ActionResult GetStartDate(VideoLogsModel model)
    {
        model.StartDate = System.DateTime.Now;
        ELearningDosyaKullaniciDTO user = new ELearningDosyaKullaniciDTO();
        user.egitimFileID = model.EgitimFilesId;
        user.egitimKullanıcı = model.PerNr;
        user.startDate = model.StartDate;
        ELearningService service = new ELearningService();
        //service.CreateLogs(user);
        //return RedirectToAction("Index","Video",model);*/
        return RedirectToAction("Index", model);
    }
    [HttpPost]
    public ActionResult GetEndDate(VideoLogsModel model)
    {
        model.EndDate = System.DateTime.Now;
        ELearningDosyaKullaniciDTO user = new ELearningDosyaKullaniciDTO();
        user.egitimFileID = model.EgitimFilesId;
        user.egitimKullanıcı = model.PerNr;
        user.endDate = model.EndDate;
        ELearningService service = new ELearningService();
        service.UpdateLogs(user);
        TempData.Add("message", String.Format("Eğitiminiz Tamamlanmıştır!"));
        return RedirectToAction("Index", "Home");
    }
}

У меня вопрос, как я могу передать модель из домашнего индекса в видеоконтроллер, а затем в видео индекс?

Индекс видео не запускается. Идет в индекс видео, но затем снова запускается индекс дома.

Также он запускает функцию egitimibitir() перед функцией нажатия кнопки.

1 Ответ

0 голосов
/ 27 июня 2018

Вы отправляете ajax-запрос к вашим услугам. (endpoint => GetEndDate) Я думаю, что вы можете изменить свой код следующим образом,

 $.ajax({
         type: "POST",
         url: "/Video/GetEndDate",  //your reqeust url
         contentType: "application/json; charset=utf-8",
         data: JSON.stringify({
               // your data here
         }),
         success: function (data) {
               // check state of data
               // after check window.location = // redirect url
         },
         error: function (data) {
               // handle exception 
         }
 });

Вы можете изменить свой метод контроллера на контроллер данных. (не ActionResult. создайте пользовательский объект результата, который включает ваши данные и ваше состояние успеха. вы можете использовать этот пользовательский объект результата каждый раз, когда ajax запрашивает состояние возврата и данные). Если во время выполнения метода «GetEndDate» возникает исключение, вам нужно обработать исключение и показать его клиенту. Вы отправляете исключение или ваш успешный полный ответ клиенту (просмотр). (вы можете обработать данные об исключении в ajax error: function)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...