0

私の仕事では、いくつかの銀行アプリケーションの仕事のリストを表示するために、Webアプリケーションを開発する必要があります。実際、このアプリケーションの大部分は実行されていますが、ジョブのタイプを選択できるドロップダウンリストを含める必要があります。私はこの点で完全にブロックされています。

インデックスページには、いくつかのアプリケーションとそのステータス(Job OK、KO、...)がリストされているリストがあります。ユーザーは、アプリケーションのステータス(画像)をクリックして、他のページを表示できます。 2つのパラメータ(アプリケーションと銀行のID)の機能でいくつかの情報を含むより詳細なリストが表示されます。これが私の見解のリンクです:

<a href="@Url.Action("PageDomaines", new { Controller = "Suivi", CR = VarCR, Appli = VarAppli[j] })">
<img src="../../Content/Images/feu_rouge.png" alt="Statut OK" border="0" /></a>

2つのパラメーターCRとAppliは、ビューから適切なアクションへのURLに渡されます。その後、それらに対してクエリを実行してリストを取得します。

問題は、アクション「PageDomaiens」のビューにあるドロップダウンリストで値を選択すると、パラメーターが保持されず、空のリストが表示されることです。ドロップダウンリストで選択した値がコントローラーに送信され、機能するかどうかを確認するなどのテストを行いました。「PageDomaines」のビューで選択した値を表示できますが、パラメーターCRとAppliを保持しません。 ..。。

これが私のクエリでの私のアクション「PageDomaines」です:

public ActionResult PageDomaines(string CR, string Appli, string DDL)
    {

        string GetCR = CR;
        string GetAppli = Appli;
        string GetDDL = DDL;


        if (GetDDL == null)
        {
            var items = GetDomaines();
            int Var1 = DateTime.Now.Year;
            int Var2 = DateTime.Now.Month;
            string Var3 = "" + Var1 + Var2;

            var Query = (from i in items
                         where i.Field<String>("CD_APPLI") == GetAppli && i.Field<String>("CD_CR") == GetCR && i.Field<Int64>("PERIODE").ToString().Contains(Var3)
                         select new Suivi { CD_TRT = i.Field<String>("CD_TRT"), LB_TRT = i.Field<String>("LB_TRT"), CD_CR = i.Field<String>("CD_CR"), PERIODE = i.Field<Int64>("PERIODE"), CD_APPLI = i.Field<String>("CD_APPLI"), STATUT = i.Field<String>("STATUT") }).ToList();

            ViewData["CR"] = GetCR;
            ViewData["Appli"] = GetAppli;

            return View(Query);
        }
        else
        {
            var items = GetDomaines();
            int Var1 = DateTime.Now.Year;
            int Var2 = DateTime.Now.Month;
            string Var3 = "" + Var1 + Var2;
            ViewData["DDL"] = GetDDL;
            var Query = (from i in items
                         where i.Field<String>("CD_APPLI") == GetAppli && i.Field<String>("CD_CR") == GetCR && i.Field<Int64>("PERIODE").ToString().Contains(Var3) && i.Field<String>("CD_TRT").Trim() == GetDDL
                         select new Suivi { CD_TRT = i.Field<String>("CD_TRT"), LB_TRT = i.Field<String>("LB_TRT"), CD_CR = i.Field<String>("CD_CR"), PERIODE = i.Field<Int64>("PERIODE"), CD_APPLI = i.Field<String>("CD_APPLI"), STATUT = i.Field<String>("STATUT") }).ToList();

            ViewData["CR"] = GetCR;
            ViewData["Appli"] = GetAppli;

            return View(Query);
        }
    }

    private List<DataRow> GetDomaines()
    {

        List<DataRow> liste = null;

        string query = "select CD_TRT, LB_TRT, CD_CR, PERIODE, CD_APPLI, case "
        + "when (exists (select 1 from dbo.LOGS l, dbo.REF_JOB j  where j.CD_JOB = l.CD_JOB and j.CD_TRT = t.CD_TRT and l.CD_CR = cr.CD_CR and l.STATUT = 'OK' and j.JR_EXEC >= DAY(l.DT_DEB))) "
        + "and not exists (select 1 from dbo.LOGS l, dbo.REF_JOB j  where j.CD_JOB = l.CD_JOB and j.CD_TRT = t.CD_TRT and l.CD_CR = cr.CD_CR  and l.PERIODE = p.PERIODE "
        + "and ((j.JR_EXEC < DAY(l.DT_DEB) and l.DT_DEB is not null) or (l.STATUT in('KO','NEXEC')))) then 'OK' "
        + "when (exists(select 1 from dbo.LOGS l, dbo.REF_JOB j  where j.CD_JOB = l.CD_JOB and j.CD_TRT = t.CD_TRT and l.CD_CR = cr.CD_CR  and l.PERIODE = p.PERIODE and j.JR_EXEC < DAY(l.DT_DEB) "
        + "and DAY(l.DT_DEB) IS not null and l.STATUT = 'KO')) then 'KO' "
        + "when (exists(select 1 from dbo.LOGS l, dbo.REF_JOB j  where j.CD_JOB = l.CD_JOB and j.CD_TRT = t.CD_TRT and l.CD_CR = cr.CD_CR  and l.PERIODE = p.PERIODE "
        + "and j.JR_EXEC < DAY(l.DT_DEB) and DAY(l.DT_DEB) IS not null and l.STATUT in('OK','NEXEC'))) then 'EN COURS' "
        + "when (exists(select 1 from dbo.LOGS l, dbo.REF_JOB j  where j.CD_JOB = l.CD_JOB and j.CD_TRT = t.CD_TRT and l.CD_CR = cr.CD_CR  and l.PERIODE = p.PERIODE "
        + "and j.JR_EXEC < DAY(l.DT_DEB) and DAY(l.DT_DEB) IS not null)) then 'EN RETARD' else 'NON INITIE' end STATUT "
        + "from dbo.REF_TRT t, dbo.REF_CR cr, (select distinct PERIODE from dbo.LOGS) p ";

        string connString = "Data Source=.;Initial Catalog=SUIVI_DWH;Integrated Security=True";

        using (SqlConnection conn = new SqlConnection(connString))
        {
            using (SqlCommand objCommand = new SqlCommand(query, conn))
            {
                objCommand.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                SqlDataAdapter adp = new SqlDataAdapter(objCommand);
                conn.Open();
                adp.Fill(dt);
                if (dt != null)
                {
                    liste = dt.AsEnumerable().ToList();
                }
            }
        }

        return liste;
    }

    private List<DataRow> GetPERIODE()
    {
        List<DataRow> liste = null;

        string query = "select distinct PERIODE from dbo.LOGS";

        string connString = "Data Source=.;Initial Catalog=SUIVI_DWH;Integrated Security=True";

        using (SqlConnection conn = new SqlConnection(connString))
        {
            using (SqlCommand objCommand = new SqlCommand(query, conn))
            {
                objCommand.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                SqlDataAdapter adp = new SqlDataAdapter(objCommand);
                conn.Open();
                adp.Fill(dt);
                if (dt != null)
                {
                    liste = dt.AsEnumerable().ToList();
                }
            }
        }

        return liste;
    }

そして「PageDomaines」の見方:

@model IEnumerable<SUIVI_DWH.Models.Suivi>
@using SUIVI_DWH.Helpers
@{
    ViewBag.Title = "PageDomaines";
}
<h2>@ViewData["CR"]
    @ViewData["Appli"]
    @ViewData["DDL"]
</h2>
@using (Html.BeginForm("PageDomaines", "Suivi"))
{
    @Html.DropDownList("DDL", new SelectList(new[] { "MMCR", "MMCL", "MMCO", "MMSE", "MMAS" }), "--Select one--", new { onchange = "this.form.submit();" })
}

<table>
    <tr>
        <th>
            CD_TRT
        </th>
        <th>
            LB_TRT
        </th>
        <th>
            PERIODE
        </th>
        <th>
            STATUT
        </th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @item.CD_TRT
            </td>
            <td>
                @item.LB_TRT
            </td>
            <td>
                @item.PERIODE
            </td>
            <td>
                @if (item.STATUT == null)
                {
                    <img src="../../Content/Images/feu_croix.png" alt="Statut null" />
                }
                else if (item.STATUT == "KO")
                {
                    <a href="@Url.Action("PageLogs", new { Controller = "Suivi", CR = ViewData["CR"], Appli = ViewData["Appli"], TRT = item.CD_TRT, PERIODE = item.PERIODE })">
                        <img src="../../Content/Images/feu_rouge.png" alt="Statut KO" border="0" /></a>    
                }
                else if (item.STATUT == "OK")
                {
                    <a href="@Url.Action("PageLogs", new { Controller = "Suivi", CR = ViewData["CR"], Appli = ViewData["Appli"], TRT = item.CD_TRT, PERIODE = item.PERIODE })">
                        <img src="../../Content/Images/feu_vert.png" alt="Statut OK" border="0" /></a>                
                }
                else if (item.STATUT == "EN RETARD")
                {
                    <a href="@Url.Action("PageLogs", new { Controller = "Suivi", CR = ViewData["CR"], Appli = ViewData["Appli"], TRT = item.CD_TRT, PERIODE = item.PERIODE })">
                        <img src="../../Content/Images/feu_orange.png" alt="Statut en retard" border="0" /></a>                
                }
                else if (item.STATUT == "NON INITIE")
                {
                    <a href="@Url.Action("PageLogs", new { Controller = "Suivi", CR = ViewData["CR"], Appli = ViewData["Appli"], TRT = item.CD_TRT, PERIODE = item.PERIODE })">
                        <img src="../../Content/Images/feu_blanc.png" alt="Statut non initié" border="0" /></a>                
                }
                else if (item.STATUT == "EN COURS")
                {
                    <a href="@Url.Action("PageLogs", new { Controller = "Suivi", CR = ViewData["CR"], Appli = ViewData["Appli"], TRT = item.CD_TRT, PERIODE = item.PERIODE })">
                        <img src="../../Content/Images/feu_jaune.png" alt="Statut en cours" border="0" /></a>                
                }
            </td>
        </tr>
    }
</table>

私は何も忘れていないことを願っています。

この問題を解決するための提案はありますか?

4

3 に答える 3

0

スペースが足りないのでこちらでお答えします。

ええ、おおよそこれです。ユーザーが最初の表 (左側) の ESPAS CE の STATUS をクリックすると、2 つのパラメーター (CR と Appli、この場合は CR = CE と Appli = ESPAS) が渡されます。このリンクを使用したコントローラー「SuiviController」のアクションのビューからの URL: <a href="@Url.Action("PageDomaines", new { Controller = "Suivi", CR = VarCR, Appli = VarAppli[j] })"> <img src="../../Content/Images/feu_rouge.png" alt="Statut OK" border="0" /></a>

その後、私のアクションは CR と Appli の 2 つのパラメーターを取得し、where 句でこのパラメーターを使用してクエリを実行します (クエリは最初の投稿にあります)。クエリの結果がアクションのビューに返され、2 ページ目 (右側) に 2 番目のテーブルがドロップダウン リストと共に表示されます。別のこととして、ユーザーが 2 番目のページにいる場合、URL は次のようになります。

http://localhost:56672/Suivi/PageDomaines?CR=CE%20%20%20%20%20%20%20%20&Appli=ESPAS

しかし、ユーザーがドロップダウン リストで値を選択すると、ページが更新され、パラメーターが失われ、URL は次のようになります。

http://localhost:56672/Suivi/PageDomaines

そして、ドロップダウンリストで値を選択すると、最初のページから渡されたパラメーターが失われました。それらを保持する方法がわかりません...

ドロップダウンリストのコードは最初の投稿に示されていますが、ここにあります:

    @using (Html.BeginForm("PageDomaines", "Suivi"))
{
    @Html.DropDownList("DDL", new SelectList(new[] { "MMCR", "MMCL", "MMCO", "MMSE", "MMAS" }), "--Select one--", new { onchange = "this.form.submit();" })
}

私の言いたいことが分かりますか ?


2番目の段落でアプローチしたポイントについては、ユーザーにそのような選択肢を与えたくありません。私の質問では、2番目のテーブルにすべての行を表示するために、単純な選択でドロップダウンリストを使用しましたCD_TRT は選択した値と等しいので、MMCL を選択すると、次の行が表示されます: MMCL / Client - DMCL / 20121001 / Status が表示されます。しかし、それは私が最終的に持っているドロップダウンリストではありません. 最後のドロップダウンリストは、ユーザーが次の形式に従って日付の関数で実行されたジョブを選択できるリストになります: 2012 年 1 月、2012 年 2 月、... または他のアプリケーション (例では BO) 2012 年 1 月 25 日、 2012 年 1 月 26 日など... 選択される値は、最初のページで選択されたアプリケーションによって異なります。

疑問がある場合は、私に言ってください:)

そして本当に、あなたの助けに感謝します。

于 2012-10-12T07:26:07.267 に答える
0

ええ、別のフォーラムの誰かの助けを借りて解決策を見つけました。

それは本当に簡単でした。追加する必要があったのは BeginForm だけでした。これを追加する必要がありました。

@using (Html.BeginForm("PageDomaines", "Suivi", new { CR = @ViewData["CR"], Appli = @ViewData["Appli"] }))

BeginForm には、アクション、コントローラー、コントローラーに渡すパラメーターとその値が順番に含まれています。

私の研究中に、それは私が考えた解決策でしたが、それをコーディングする方法がわかりませんでした。正しい構文があれば、すべてがうまくいきます。

于 2012-10-15T14:36:56.307 に答える
0

スペースの制約のため、ここで回答します:)。私の理解が正しければ、インデックス ページの左側にテーブルがあり、ESPAS Centre-Est をクリックすると、新しいページが開き、右側に CE ESPAS のリストが表示されます。上部にドロップダウンがあり、ユーザーがその中の値の 1 つを選択すると、VarCR と VarAppli は空になりますか? (もうすぐ終了時間なので、うまくいかなかったら疲れのせいにします (:)

その場合は、ドロップダウンのコードを表示する必要がありますが、その前に、テーブルをクリックするか、少なくともチェックボックスにチェックを入れたり、各行の先頭または末尾に配置されたボタン。他のすべてが同じように見えるときに、2 つの異なる方法でユーザーに選択させるのは嫌ですが、それは私だけです。テーブルから選択する場合は、最初のテーブルのように URL に CE と Appli の値を含めることができます。それでもドロップダウンが必要な場合は、選択リストを使用して確認する必要があります。表示値と、CE や Appli 値などの追加情報を保存できる「バッキング」値があります。ここで確認できます。http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx

これがあなたの質問に答えてくれることを願っています。明確でない場合は、私に知らせてください。頭の中では明らかですが、ごちゃごちゃになっている可能性があります:)

于 2012-10-11T14:04:07.023 に答える