0

ボタンをクリックすると2つのアクションを実行できるように、さまざまな投稿を見ています。

私のaspxページにはフォームが含まれており、ボタンをクリックするとフォームがコントローラーに送信され、コントローラーでフォームデータを使用しており、フォームの値に基づいて部分ビューをレンダリングしており、部分ビューを aspx に表示したい.

以下の手順を実行しています:

   <form id="StatsForm" name="StatsForm" action="../Stats/Index/" method="POST"
                enctype="multipart/form-data">
                <%= Html.AntiForgeryToken()%>
                <% Html.RenderPartial("OptionalFields"); %>
            </form>

 <script type="text/javascript" language="javascript">
                //<![CDATA[

                $(document).ready(function () {
                    $("#GetReport").click(function () {
                        $("form[name=StatsForm]").submit();

                    });
                });

                //]]>
            </script>

私のコントローラー:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection form)
    {
        // Deal with the form 
        var strId= Convert.ToInt32(form["manufacturerId"]);
        var str1Id= Convert.ToInt32(form["reportId"]);
        var str2Id= Convert.ToInt32(form["categoryId"]);
        var str3Id= Convert.ToInt32(form["retailerId"]);
        var str4Id= Convert.ToInt32(form["countryId"]);
        var str5Id= Convert.ToInt32(form["regionId"]);
        var str6Id= (form["ManufacturerWidgetId"]);
        var startDate = new DateTime(1, 1, 1, 0, 0, 0, 0);
        var endDate = new DateTime(1, 1, 1, 0, 0, 0, 0);

        if (!String.IsNullOrEmpty(form["StartDate"]))
        {

           startDate = Convert.ToDateTime(form["StartDate"]);
        }
        if (!String.IsNullOrEmpty(form["EndDate"]))
        {
            endDate = Convert.ToDateTime(form["EndDate"]);
        }

        var reportName = _reportRepository.GetReport(reportId);


        var stats = new Stats
                        {

                            };

         switch (reportName.Code)
        {
            case "ABC":
                return RedirectToAction("InterStats",
                                    new
                                    {


                                    });
                break;
            case "XYZ":
                return RedirectToAction("ParametersCumLeads",
                                    new
                                    {

                                    });
                break;
            case "IMP":

                break;
        }

私の部分的な見解:

    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public ActionResult InterStats(int str1Id, int str2Id, DateTime startDate, DateTime endDate)
    {
        var str = _manufacturerWidgetsRepository.GetManufacturerWidgetByManufacturerAndCountry(manufacturerId, countryId);
        var report = new ABCReport();
        var reportList = new List<ReportList>(); // a list of my anonymous type without the relationships
        report.reportList = new List<Record>();
        var count = 1;
        foreach (var mw in str)
        {
           // I am doing some function



            //  Create the data for the report
                       }
                return PartialView(report);
    }

そして、aspx に部分ビューを表示しようとしています。私の質問は、送信ボタンを 2 回クリックせずに、フォームをコントローラーに送信し、aspx に部分ビューを挿入する方法です。

4

1 に答える 1

1

Ok、

これを達成するには、次の 2 つのことを行う必要があります。

  1. を実行するのではなく、コントローラーが「PartialView」を返す必要があります (おそらく、PartialViewで呼び出すパーシャルにデリゲートするマスターでさえInterStats)。RedirectToAction
  2. アクションをリファクタリング.submit()してフォームを送信し、成功のコールバックでajax返されたものを受け入れてページに追加する必要があります。ActionResult

私は輸送中です。それ以外の場合は、簡単な例になります。まだ必要な場合は、後で更新します。

于 2013-07-02T07:47:04.853 に答える