2017-10-04 13 views
-1

Razorview 및 Entity Framework를 사용하고 있으며 다음을 달성하려고합니다. 열 이름 목록이있는 드롭 다운 (id = ColumnName)이 있습니다. 테이블에서 값을 검색하기위한 텍스트 상자 (id = SearchValue). 버튼을 클릭 할 때 데이터베이스에서 관련 데이터를 검색하고 있습니다 (열 이름이 'ColumnName'이고 값이 'SearchValue'인 레코드). 이것은 잘 작동하지만 관련 데이터를 다시 얻으면 'SearchValue'와 'ColumnName'이 선택되지 않습니다. 내가 선택한 값을 저장하고 테이블에 관련 데이터를 가져 오는 방법을 모르겠습니다. 다음과 같이 내 코드는 다음과 같습니다개별 열 검색을 기반으로 테이블을 표시하십시오. 검색 필드 및 값 유지

HTML :

<select id='mySelector' name="ColumnName"> 
     <option value="">Please Select</option> 
     <option value='Country'>Country</option> 
     <option value='Title'>Title</option> 
     <option value='State'>State</option> 
    </select> 
    <input type="text" id="cs" name="SearchValue"> 
    <input type="button" value="Search" onclick="location.href='@Url.Action("FilterByColumn", "CountryController")?SearchValue=' + document.getElementById('cs').value + '&ColumnName=' +document.getElementById('mySelector').value" /> 
    <table id='myTable'> 
    // values 
    </table> 

CountryController :

public ActionResult FilterByColumn(String ColumnName, String SearchValue) 
{ 

    if (!String.IsNullOrEmpty(SearchValue)) 
    { 
     List<Country> result = new List<Country>(); 
     result = db.Countries.ToList(); 
     result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList(); 
     return View(result); 
    } 
    return RedirectToAction("Index"); 
} 

참고 :이 컨트롤러를 작성, 편집 등의 다른 방법을 가지고있다.

+0

내가 그것을 할 방법은 내가 다시 ViewBag와 뷰 되었 있도록 다음 숨겨진 필드에 검색 값을 삽입하기 위해 사용 JQuery와입니다. 이렇게하면 나중에 데이터베이스에 노출 될 수있는 정보가 URL에서 제외됩니다. – Danimal

+0

또한 ajax를 사용하여 새로 고칠 데이터 만 새로 고쳐 모든 이전 페이지 데이터를 유지할 수 있습니다. – Danimal

+0

@Danimal : 예를 들어 설명해 주시겠습니까? – user7221204

답변

1

예를 들어서 searchvalue 면도날 예제를 실행하면 선택한 항목이 될 columname에 적절한 면도기 요소를 수행하고 온라인으로 많은 자습서를 다시 작성해야합니다.

<form id="myform" action="FilterByColumn" method="post"> 
<select id='mySelector' name="ColumnName"> 
    <option value="">Please Select</option> 
    <option value='Country'>Country</option> 
    <option value='Title'>Title</option> 
    <option value='State'>State</option> 
</select> 
@if (ViewBag.searchval != ""){ 
@Html.Raw ('<input type='text' id='cs' name='SearchValue' value="[email protected]+">"); 
} 
else 
{ 
@Html.Raw ('<input type="text" id="cs" name='SearchValue'>"); 
} 
<input type="submit" value="Search" /> 
</form> 
<table id='myTable'> 
// values 
</table> 

CountryController :

public ActionResult FilterByColumn(String ColumnName) 
     { 
      ViewBag.searchval = ""; 
      string SearchValue = Request.Form["SearchValue"]; 
      if (SearchValue != "") 
      { 
       List<Country> result = new List<Country>(); 
       result = db.Countries.ToList(); 
       result = db.Countries.Where(ColumnName + ".Contains" + "(\"" + SearchValue.ToLower() + "\")").ToList(); 
       ViewBag.searchval = SearchValue; 
       return View(result); 
      } 
      return RedirectToAction("Index"); 
     } 
+0

감사합니다 댓글. 그러나 내 문자열 SearchValue = Request.Form [ "SearchValue"]; 검색 상자에 무언가를 입력하더라도 null 값을 얻고 있습니다. – user7221204

+0

양식 태그를 올바르게 사용했다고 가정 했습니까? – Danimal

+0

아무 것도 게시 메서드없이 게시 할 것입니다, 위의 코드를 살펴본 후에 양식 태그를 사용했다고 가정했습니다. 폼 항목 위 및 아래에 추가하지 않았다는 것을 깨달았습니다. 해당 페이지가 CountryController에 없으면 동작이 다를 수 있습니다. action = "CountryController/FilterByColumn – Danimal