2016-12-28 44 views
0

我有一個ASP.NET proj。 MVC核心與一系列表。每個人都有一個叫做「年」的字段。在_Layout中,我有下一個5年(2017年,2018年等)的下拉列表。我希望在控制器的每個操作中都接收下拉選擇的值,以便將「按年份」過濾器應用於查詢。從控件(如下拉列表)獲取字符串值到控制器操作中。 MVC Core 1.x

_LAYOUT.CSHTML PAGE

<select name="EF_DROP" id="EF_DROP" class="btn btn-default" style="width:105px;" aria-haspopup="true" aria-expanded="true" type="button"> 
           <option value="0">EF 2017</option> 
           <option value="1">EF 2018</option> 
           <option value="2">EF 2019</option> 
           <option value="3">EF 2020</option> 
          </select> 
//this is my Jquery to set Hidden Fields 
$(function() { 
      $("#EF_DROP").on("change", function() { 
       $("#YEAR").val($(this).find(":selected").text().substr(3, 4)); 
      }); 
     }); 

     $(function() { 
      $("#YEAR").val($("#EF_DROP").find(":selected").text().substr(3, 4)); 
     }); 

每個視圖PAGE

<input type="hidden" asp-for="YEAR" /> 

的問題是在控制器:

public async Task<IActionResult> Index() 
     { 

      var applicationDbContext = _context.MYTABLE.Include(a => a.RELATE) 
       .Where(x=>x.Year == **??**); 
      return View(await applicationDbContext.ToListAsync()); 
     } 

我試圖添加一個單身,但不能從收藏或利用的Request.Form [「名稱」]找到的getValue .... 有人能幫助我嗎?提前致謝。

+1

你爲什麼不用年份本身作爲價值?像'' –

+0

我可以在這種模式下簡化什麼?抱歉的初學者問題!但我不是專家。 –

+1

這種方式你甚至不需要使用隱藏字段'YEAR'。只需將'EF_DROP'重命名爲'YEAR'即可。你也不需要任何jQuery代碼。 –

回答

0

我有以下方法解決:

_LAYOUT.CSHTML 使用jQuery

 $(function() { 
      var value = localStorage.getItem("POS"); 

      if (value != null) 
      { 
       $("#EF_DROP").val(value).change(); 
      } 
      else 
      { 
       $("#EF_DROP").val(0).change(); 
      } 
      $("#Year").val($("#EF_DROP").find(":selected").text().substr(3, 4)); 

       $("#EF_DROP").on("change", function() { 
        $("#Year").val($(this).find(":selected").text().substr(3, 4)); //Hidden Field 
        var url = "/Home/SetEF"; 
        $.post(url, { item: $(this).find(":selected").text().substr(3, 4) }, function (response) { 
         localStorage.setItem("POS", response); 
        }); 
       }); 
     }); 

    </script> 

控制器

[HttpPost] 
     public int SetEF(string item) 
     { 
      int pos; 
      switch (item) 
      { 
       case "2017": 
        pos = 0; 
        TempData["EF"] = 2017; 
        return pos; 

       case "2018": 
        pos = 1; 
        TempData["EF"] = 2018; 
        return pos; 

       case "2019": 
        pos = 2; 
        TempData["EF"] = 2019; 
        return pos; 

       case "2020": 
        pos = 3; 
        TempData["EF"] = 2020; 
        return pos; 

       default: 
        return 0; 
      } 
} 

我使用TempData檢索數據到另一個控制器,所以我可以應用過濾器....無論如何,我認爲這不是優雅的,但我不知道如何以一種新的方式。

+0

最後,我解決了! 感謝Dhanuka777和Anderson Pimentel。我製作了一系列信息。 –

0

使用繼承,您需要在類層次結構中高級別的年份屬性,以便在較低級別的類中獲得更高的可見性。

創建一個「BaseController」(繼承自MVC Controller類)類並在該BaseController中添加「Year」作爲公共屬性。從基礎控制器繼承您的MVC控制器。 Porperty「Year」將在BaseController繼承的所有控制器中可用。 「年份」也可以在剃刀視圖中訪問。

相關問題