Как передать переменную из одного контроллера в другой с помощью MVC Contrib? - PullRequest
1 голос
/ 18 января 2012

У Джереми Скиннера есть блог и видео об экспорте электронной таблицы из MVC Contrib. Проблема в том, что в его видео или блоге нет фильтрации. В контроллере, связанном со страницей, содержащей сетку, у меня есть фильтры, а в контроллере, связанном с «Экспорт в электронную таблицу, мне нужен этот фильтр без сброса. Проблема в том, что переменная сбрасывается каждый раз, когда я нажимаю на« Экспорт в Spreadsheet "link. Как передать эту переменную с одного контроллера на другой без сброса?

Вот ссылка Джереми, http://www.jeremyskinner.co.uk/2010/04/28/mvccontrib-grid-presentation. Спасибо !!

Ответы [ 2 ]

0 голосов
/ 21 января 2012

Использовать объект TempData [""].

Ваша ViewModel должна выглядеть примерно так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using MvcContrib.Pagination;
using MvcContrib.UI.Grid;
using System.Web.Mvc;

namespace MyMVCProject.ViewModels
{
    public class SubscriptionViewModel
    {
        public int SubscriptionID { get; set; }        
        public string SubNo { get; set; }               
    }
    public class SubscriptionListContainerViewModel
    {
        public IPagination<SubscriptionViewModel> SubscriptionPagedList { get; set; }
        public SubscriptionFilterViewModel Filters { get; set; }
        public GridSortOptions GridSortOptions { get; set; }
        public int? TotalCount { get; set; }
    }
    public class SubscriptionFilterViewModel
    {
        public int? CustomerID { get; set; }
        public int? PlanID { get; set; }        
    }
}

Действие вашего контроллера:

    public ActionResult Index(SubscriptionListContainerViewModel model, GridSortOptions gridSortOptions, int? page)
            {
              SubscriptionFilterViewModel filter = new SubscriptionFilterViewModel();
                if (model.Filters != null)
                {
                    filter.CustomerID = model.Filters.CustomerID;
                    filter.PlanID = model.Filters.PlanID;
                }
              TempData["Filters"]=filter;
             //code for IPagination<SubscriptionViewModel> population.
            }

Функция экспорта:

public void Export()
        {
          SubscriptionFilterViewModel filter = (SubscriptionFilterViewModel)TempData["Filters"];
          TempData["Filters"]=filter;
          //code for IPagination<SubscriptionViewModel> population and excel creation.
          //output the excel after creation

            Guid fileId = Guid.NewGuid();
            string strFileName = Convert.ToString(fileId) + ".xls";
            string strFilePathnName = HttpContext.Server.MapPath ("~/Content/Uploads/Excels/Export/") + strFileName;
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            System.IO.File.WriteAllBytes(strFilePathnName, file.GetBuffer());
            System.IO.FileInfo inf = new FileInfo(strFilePathnName);
            HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=Blogs" + inf.Extension);
            HttpContext.Response.ContentType = "application/ms-excel";
            HttpContext.Response.TransmitFile(HttpContext.Server.MapPath ("~/Content/Uploads/Excels/Export/" + strFileName));
        }

Для вызова действия экспорта нажмите кнопку «Экспорт в Excel».

0 голосов
/ 20 января 2012

В итоге я создал переменную Session, например:

1- Включите переменную сеанса, отредактировав web.config с помощью этого:.

<configuration>
   <system.web>
      <sessionState cookieless="true" regenerateExpiredSessionId="true" />
   </system.web>
</configuration>

2 - Создать состояние сеанса в первом контроллере

Session["FirstName"] = FirstNameTextBox.Text;

3 - Использовать состояние сеанса во втором контроллере

string firstName = (string)(Session["FirstName"]);
...