[SQL] ASP.NET MVC에서 컨트롤러 여러 매개 변수를 통과시키는 단계; 또한, LINQ - 투 - SQL에서 즉석 쿼리를 생성
SQLASP.NET MVC에서 컨트롤러 여러 매개 변수를 통과시키는 단계; 또한, LINQ - 투 - SQL에서 즉석 쿼리를 생성
나는 ASP.NET MVC를 배우기 위해 기본적인 문제 관리 시스템에서 일하고 있어요. 나는 그것을 입수하고 상당히 괜찮은 수준으로 실행하지만 난 문제로 실행했습니다했습니다.
나는 열기이라고 볼 수있는 문제라는 컨트롤러를 가지고있다. 열려있는 모든 문제 / 문제 / 열기 목록은 현재 시스템에 로그온. 그래서 같은 경로를 정의했습니다 :
routes.MapRoute(
"OpenSort", // Route name
"Issue/Open/{sort}", // URL with parameters
new { controller = "Issue", action = "Open", sort = "TimeLogged" } // Parameter defaults
);
이 IssueController.cs에 다음 코드를 사용하여, 지금까지 잘 작동 있습니다 :
public ActionResult Open(string sort)
{
var Issues = from i in db.Issues where i.Status == "Open" orderby i.TimeLogged ascending select i;
switch (sort)
{
case "ID":
Issues = from i in db.Issues where i.Status == "Open" orderby i.ID ascending select i;
break;
case "TimeLogged":
goto default;
case "Technician":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Technician ascending select i;
break;
case "Customer":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Customer ascending select i;
break;
case "Category":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Category ascending select i;
break;
case "Priority":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Priority ascending select i;
break;
case "Status":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Status ascending select i;
break;
default:
break;
}
ViewData["Title"] = "Open Issues";
ViewData["SortID"] = sort.ToString();
return View(Issues.ToList());
}
나는 열기 문제보기에 두 가지 일을 할 수 있도록하려면 지금 만 (? 내가 스위치보다 쿼리의 나의 정의를 처리하기 위해 더 나은 방법이 있는지 궁금하지만)이 잘 작동한다 :
난 내 쿼리를 구성 할 수 있도록 컨트롤러에 두 개의 매개 변수를 전달하는 방법을 알아낼 수 없습니다. 나는 또한 깨달았으니 나는 내가 내 스위치를 필요로 (정렬 옵션의 수) * (필터 옵션의 수) 가고 비행에 내 쿼리를 생성하는 방법을 알아낼하지 않는 한.
아아, 올바른 방향으로 캔 누구 포인트 나? 건배!
해결법
-
==============================
1.http://example.com/Issue/Open?sort=ID&filter=foo
http://example.com/Issue/Open?sort=ID&filter=foo
public ActionResult Open(string sort, string filter)
MVC의 프레임 워크는 쿼리 문자열 매개 변수의 인수를 입력합니다. 확인하고 채워되지 않을 수 있습니다 이러한 쿼리 문자열 매개 변수 인수의 대한 (문자열 등) nullable 형식을 사용합니다.
사실이 URL을 작성하는 "더 올바른"방법이라고 생각합니다. URL 자체는 자원을 (공개 문제) 식별; 쿼리 문자열 매개 변수는 자원을 표시하는 방법을 사용자 정의 할 수 있습니다.
지금까지 쿼리 수는 가서, 한 번에 전체 쿼리를 작성하지 않아도 기억한다. 기존 된 IQueryable
, 유사 어디에요로 다시 주문에 .OrderBy 확장 방법을 사용할 수 있습니다. var Issues = from i in db.Issues where i.Status == "Open" select i; switch (sort) { case "ID": Issues = Issues.OrderBy(i => i.ID); break; // [...] default: Issues = Issues.OrderBy(i => i.TimeLogged); }
-
==============================
2.당신이 매개 변수의 임의의 수를 기대한다면, 당신이 뭔가를 할 수 있습니다.
당신이 매개 변수의 임의의 수를 기대한다면, 당신이 뭔가를 할 수 있습니다.
public ActionResult Open(){ string[] keys = Request.QueryString.AllKeys; Dictionary queryParams = new Dictionary(); foreach (string key in keys) { queryParams[key] = Request.QueryString[key]; } string sort = queryParams["sort"]; ...
-
==============================
3.이 kimsks 대답에 코멘트 수 있지만 내가 잘못된 장소에 게시 할 수 있도록 의견을 어떤 이유로, 내가 심사 할 것을 요구한다.
이 kimsks 대답에 코멘트 수 있지만 내가 잘못된 장소에 게시 할 수 있도록 의견을 어떤 이유로, 내가 심사 할 것을 요구한다.
쿼리 문자열 매개 변수의 임의의 수를 처리하는 더 좋은 방법은 지금과 같은 ActionFilter를 사용하는 것입니다 :
public class QueryStringFilterAttribute : ActionFilterAttribute { public string ParameterName { get; private set; } public QueryStringFilterAttribute(string parameterName) { if(string.IsNullOrEmpty(parameterName)) throw new ArgumentException("ParameterName is required."); ParameterName = parameterName; } public override void OnActionExecuting(ActionExecutingContext filterContext) { var qs = new FormCollection(filterContext.HttpContext.Request.QueryString); filterContext.ActionParameters[ParameterName] = qs; base.OnActionExecuting(filterContext); } }
이제 당신은 [( "속성") QueryStringFilter이]과 같이 액션에 속성을 추가 할 수 있습니다 그리고 그것은 FormCollection로 쿼리 문자열 값을 전달합니다. 더 이상 요청 싱글에 따라 달라집니다로이 방법은 당신의 작업은 더 쉽게 테스트하지 않습니다.
-
==============================
4.대신 스위치, 당신은 당신이 말할 수있는 동적 Linq에 사용할 수 :
대신 스위치, 당신은 당신이 말할 수있는 동적 Linq에 사용할 수 :
Issues = Issues.OrderBy("Status");
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
-
==============================
5.모든 프로세스를 설명하는 아래의 게시물을 확인하시기 바랍니다 http://www.c-sharpcorner.com/UploadFile/4b0136/editing-multiple-records-using-model-binding-in-mvc/
모든 프로세스를 설명하는 아래의 게시물을 확인하시기 바랍니다 http://www.c-sharpcorner.com/UploadFile/4b0136/editing-multiple-records-using-model-binding-in-mvc/
from https://stackoverflow.com/questions/488061/passing-multiple-parameters-to-controller-in-asp-net-mvc-also-generating-on-th by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 수출에 가장 빠른 방법은 개별 파일에 테이블에서 물방울 (0) | 2020.07.24 |
---|---|
[SQL] SQL 스크립트를 통해 BLOB입니까? (0) | 2020.07.24 |
[SQL] 여러 SELECT 문을 결합 (0) | 2020.07.24 |
[SQL] SQL 서버에서 날짜의 내부 표현은 무엇인가? (0) | 2020.07.24 |
[SQL] SQL은 - 쿼리처럼 여러 결합 (0) | 2020.07.24 |