簡體   English   中英

如何將對象從我的視圖傳遞到 ASP.NET MVC 中的控制器?

[英]How can I pass an object from my view to my controller in ASP.NET MVC?

我想在用戶單擊 Excel 按鈕時下載 Excel 文件。 這是我的ModelObject

List<VMStockScreenerModel> listofStockScreener = (List<VMStockScreenerModel>)TempData["StockScreener"];
TempData["StockScreener"] = listofStockScreener;

這是我認為的 Excel 按鈕:

<div class="col-md-1 padding-fx text-left" id="btn_FilterStocks">
    <span onclick="DownloadFilterStocks(@listofStockScreener.ToList());" class="pull-right icon-merge" data-toggle="tooltip" title="Download">
        <i class="fa fa-file-excel-o"></i>                        
        <i class="fa fa-cloud-download"></i>                 
    </span>                                                     
</div>

這是我的OnClick處理程序:

function DownloadFilterStocks() {
    debugger;
    var Obj = [@listofStockScreener];
    Obj = JSON.stringify({ 'Obj': Obj });
    var urls = '@(Html.Raw(Url.Action("Download_StockScreener","Home", new { Obj = "_Obj_"},Request.Url.Scheme)))'.replace("_Obj_", Obj);                   
}

控制器代碼

public FileResult Download_StockScreener(VMStockScreenerModel Obj)
        {
            try
            {
                string fileName = string.Empty;
                string filePath = string.Empty;
                string fileName_filePath = string.Empty;


                fileName_filePath = StockScreener_DownloadExcel(Obj);
                if (fileName_filePath.Contains("@"))
                {
                    filePath = fileName_filePath.Split('@')[0];
                    fileName = fileName_filePath.Split('@')[1];
                }
                if (fileName != "")
                {
                    //return File(filePath, "text/csv", fileName);

                }

                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                Log.Logging("HomeController => Download_StockScreener", ex.Message + "\n" + ex.StackTrace);

            } return null;
        }

我希望我不是為您編寫整個代碼,而是通過向您建議使解決方案起作用所需采取的步驟來指導您找到答案:

  1. 而不是span ,使元素成為錨點a
  2. 在沒有查詢字符串部分的情況下呈現錨點的 URL 服務器端(MVC 視圖)。 示例: <a href="www.mydomain.com/Stocks/ExportToExcel" onclick="DownloadFilterStocks(this)">Export</a>
  3. 在錨點的點擊事件中,執行以下操作:
    function DownloadFilterStocks(elem) {
        debugger;
        var Obj = [@listofStockScreener];

        var $elem = $(elem);

        //this converts JS object to query string
        var qParams = $.param(Obj); 

        //append query string to the anchor's base url
        var newUrl = $elem.attr('href') + '?' + qParams; 

        //assign new url
        $elem.attr('href', newUrl);
    }

這將起作用的方式是:

  1. 當點擊導出鏈接時,JS代碼會先於服務端執行。
  2. JS 將使用查詢字符串更新 URL/href
  3. 服務器端代碼將使用新的 URL 執行

希望能幫到你。 無論如何,我最終編寫了一些代碼。

注意:我的回答假設您的服務器端代碼是工作代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM