1

短くて「ストレートな」質問:

コントローラーのアクション メソッド (A) は、いくつかのパラメーターを持つフォームによって呼び出されます。同じビューには別のフォームがあり、送信時に同じコントローラー内の別のアクション メソッド (B) を呼び出します。アクション メソッド A から (B) フォームの値 (ただし、基本的にはドロップダウンとテキスト ボックスのコンテンツ値) にアクセスするにはどうすればよいですか?

長く曲がりくねった説明:

次のように、2 つのフォームを持つビューがあります。

using (Html.BeginForm("List", "Rapporti"))
{
<span>Ricerca Rapporti per   Linea </span>

@Html.DropDownList("KLinea",
    new SelectList(new RapportiCT.Domain.Entities.RapportiEntities().TLinea, "KLinea", "DLinea")
    , "Scegli una linea");

<span>Data inizio</span>
@Html.TextBox("startDate", DateTime.Now.AddDays(-4).ToShortDateString(), new { @class = "dateTextBox" });                                                  

<span>Data fine</span>
@Html.TextBox("endDate", DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"), new { @class = "dateTextBox" })
<input type="submit" value="Cerca" />
}

if (Model.Count() > 0)
{
    var lastArticolo = "";
<h2>Rapporti Capoturno @Model.First().rapportoCT.DLinea</h2>
    <table>
    @foreach (var rapporto in Model)
    {
        if (lastArticolo != rapporto.rapportoCT.DCodArt)
        {
        <tr>
            <td class="td_title">
                @rapporto.rapportoCT.DCodArt
            </td>
            <td colspan="3" class="td_title">
                @rapporto.rapportoCT.DDescArt
            </td>
            <td class="td_title">
                Rendimento
            </td>
            <td class="td_title">
                #Pallet control.
            </td>
            <td class="td_title">
                #Pallet accanton.
            </td>
            <td class="td_title">
                Ore fermo linea
            </td>
        </tr>
            lastArticolo = rapporto.rapportoCT.DCodArt;
        }
        using (Html.BeginForm("ControlloQualita", "Rapporti"))
        {
        <tr>
            <td class="td_detail">
                @rapporto.rapportoCT.Data
            </td>
            <td class="td_detail">
                @rapporto.rapportoCT.Turno
            </td>
            <td class="td_detail">
                @rapporto.rapportoCT.Lettera
            </td>
            <td class="td_detail">
                @rapporto.rapportoCT.DNota
            </td>
            <td class="td_detail">
                @rapporto.RendimentoLinea
            </td>
            <td class="td_detail">
                @Html.TextBox("PalletControllati", rapporto.PalletControllati, new { style="width:50px" })
            </td>
            <td class="td_detail">
                @Html.TextBox("PalletAccantonati", rapporto.PalletAccantonati, new { style = "width:50px" })
            </td>
            <td class="td_detail">
                @Html.TextBox("OreFermoLinea", rapporto.OreFermoLinea, new { style = "width:50px" })
            </td>
            <td>
               <input type="submit" value="Salva" />
            </td>
        </tr>
        }
    }
</table>
}

else
{
@:Nessun record trovato
}

どちらのフォームも同じRapportiControllerに投稿されます。最初のフォームはデータベースにクエリを実行し、結果のレコードを表示するために使用され、2 番目のフォームはデータベース レコードを更新するために使用されます。

ビュー (スナップショット): ここに画像の説明を入力

したがって、私の Controller クラスは次のようになります。

// No problem here
public ViewResult List(int? KLinea = null, DateTime? startDate = null, DateTime? endDate = null)
    {
        IQueryable<VRapportiCT> qVRapporti = repository
                    .ViewRapporti(KLinea.Value, startDate.Value, endDate.Value);

        List<VRapportiCT> lRapporti = qVRapporti.ToList();

        List<RapportoRendimentoViewModel> listRRVM = new List<RapportoRendimentoViewModel>();
        foreach (var rapporto in lRapporti)
        {
            RapportoRendimentoViewModel rrVM = new RapportoRendimentoViewModel();
            rrVM.rapportoCT = rapporto;
            rrVM.RendimentoLinea = repository.GetRendimentoLinea(rapporto);
            rrVM.PalletControllati = "0";
            rrVM.PalletAccantonati = "0";
            rrVM.OreFermoLinea = "0";
            listRRVM.Add(rrVM);
        }

        return View(listRRVM);
    }

    public RedirectToRouteResult ControlloQualita(int PalletControllati, int PalletAccantonati, int OreFermoLinea)
    {
        // How can I access the 1°form values here (a.k.a. the DropDown and Date text box values?

        // ...Fake values, only to assert that the parameters get passed to the action...
        RouteValueDictionary dic = new RouteValueDictionary();
        dic.Add("KLinea", 55);
        dic.Add("startDate", DateTime.Now.AddDays(-4));
        dic.Add("endDate", DateTime.Now);

        return RedirectToAction("List", "Rapporti", dic);
    }
4

1 に答える 1

1

ここに 2 つのオプションがあります。

  1. 最後に送信された「List」フォームを、Session、TempData、またはその他の好きなストレージに保存し、「ControlloQualita」フォーム送信時にこれらの値を復元します。このアプローチは、最新ではなく「リスト」フォームから最後に送信された値が必要であることを前提としています。

  2. 「List」フォームの値をリクエストに追加するために、「ControlloQualita」フォームの送信を傍受します。これは、「ControlloQualita」フォームに非表示の入力を追加することにより、javascript で実現できます。

于 2013-11-04T18:11:09.147 に答える