Comment puis-je utiliser RDLC rapports avec le Contrôle ReportViewer dans ASP.Net MVC?

Je suis assez nouveau à l'ASP.Net MVC. J'ai une exigence de montrer un RDLC rapport basé sur MVC.

Fondamentalement, mon exigence ainsi que ce que j'ai fait est la suivante :-

J'ai un ReportController hériter APIController, qui a une méthode qui retourne un DataSet. Ce jeu de données est envoyé à la RDLC fichier.

Pour cela, j'ai fait ce qui suit, mais ne pouvait pas faire le rapport de travail.

J'ai créé un modèle de classe nommée ReportParameter comme suit:

public class ReportParameter 
{
    public DateTime DateFrom { get; set; }
    public DateTime DateTo { get; set; }
}

J'ai le contrôleur suivant ReportViewController :

public class ReportViewController : Controller
{
    static readonly ReportController ctrl = new ReportController();

    public ActionResult GenerateReport()
    {
        return View();
    }

    [HttpPost]
    public ActionResult GenerateReport(ReportParameterSalesOrder param)
    {
        if (ModelState.IsValid)
        {
            Helpers.DataLayer dl = new Helpers.DataLayer();
            if (param.DateFrom != null)
            {
                DateTime DateFrom = Convert.ToDateTime(param.DateFrom);
                DateTime DateTo = Convert.ToDateTime(param.DateTo);

                string fdate = DateFrom.ToString("yyyy/MM/dd");
                string tdate = DateTo.ToString("yyyy/MM/dd");

                Session["ReportSales"] = ctrl.ReportSales(param);
            }

            return Redirect(Url.Action("ViewReport", "ReportView"));
        }
        return View();
    }
    public ActionResult ViewReport()
    {
         return View();
    }

}

J'ai une API Contrôleur ReportController dont l'objet a été créé dans le ci-dessus ReportViewerController générer un ensemble de données et pour remplir les rapports RDLC. L'API Contrôleur est:

public class ReportController : ApiController
{

    static readonly IReportRepository repository = new ReportRepository();

    [ActionName("ReportSales")]
    public DataSet ReportSales(ReportParameterSalesOrder paramSO)
    {
        DataSet item = repository.ReportSales(paramSO);
        if (item == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return item;
    }
}

J'ai deux points de vue GenerateReport.aspx et ViewReport.aspx. Le GenerateReport.aspx est donnée ci-dessous:

<table style="width: 40%;">
              <tr>
                  <td class="style1">
                      <h3>
                          <asp:Label ID="Label1" runat="server" Text="From Date"></asp:Label></h3>
                  </td>
                  <td>
                      <%=@Html.EditorFor(a=> a.DateFrom, new{id="startDate",style="width:250px;"}) %>
                      <%=@Html.ValidationMessageFor(a => a.DateFrom)%>
                  </td>
              </tr>
              <tr>
                  <td class="style1">
                      <h3>
                          <asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label></h3>
                  </td>
                  <td>
                      <%=@Html.EditorFor(a => a.DateTo, new { id = "ToDate", style = "width: 250px;" })%>
                      <%=@Html.ValidationMessageFor(a => a.DateTo)%>
                  </td>
              </tr>
              <tr>
                  <td class="style1">
                      &nbsp;
                  </td>
                  <td>
                      &nbsp;
                  </td>
              </tr>
              <tr>
                  <td class="style1">
                      &nbsp;
                  </td>
                  <td>
                      <input id="btnsearch" class="button" type="submit" value="Show" />
                  </td>
              </tr>
          </table>

La ViewReport.aspx est donnée ci-dessous:

 <center style="width: 974px">
      <iframe id="myReport" width="100%" height="450px" src="ReportViewer.aspx">

        </iframe></center>

J'ai ajouté un Dataset.xsd, un fichier rdlc et une page aspx pour ajouter le fichier rdlc.

Mais je ne peux pas le faire fonctionner. Comment puis-je afficher le rapport, ou comment dois-je remplir le dataset que je reçois de la manette pour le rapport ?

Le ViewReport.aspx utilisé dans le iframe aurez besoin pour être un bon vieux formulaire web avec le code derrière - comme par exemple le jeu de données dans le code-behind de ViewReport.aspx.cs. Ce que vous pouvez probablement le faire est de passer les données à partir de la MVC Contrôleur via le Session[] variable?
Le ViewReport.aspx ne dispose pas d'un fichier code-behind. Pouvez-vous expliquer un peu plus ?

OriginalL'auteur Nubicus | 2015-01-01