2011-01-19 2 views
0

ASP.NET MVC에서 여러 인수와 경로, 나는 이것을 가지고 지금까지 ...내가 MVC 응용 프로그램에서 동적 경로를 설정하려고 3

string conString = "YATAYATAYATA"; 

     SqlConnection con = new SqlConnection(conString); 
     SqlCommand cmd = new SqlCommand(); 

     // Retrieve routes from database 
     cmd.CommandText = "SELECT R.*,S.* FROM Routes R INNER JOIN Sites S ON S.ID = R.SiteID WHERE S.ID = 1"; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 

     con.Open(); 

     SqlDataReader rdr = cmd.ExecuteReader(); 

     while (rdr.Read()) 
     { 
      routes.MapRoute(
      rdr["name"].ToString(),    // Route name 
      rdr["url"].ToString(), // URL with parameters 
       new 
       { 
        controller = rdr["controller"].ToString(), // Controller name 
        action = rdr["action"].ToString(),   // Action name 
        id = UrlParameter.Optional     // Parameter defaults 
       } 
      ); 
     } 

그리고 지금은 큰 노력하고 있습니다, 나는 데 유일한 문제는 내가처럼 꺼내 수있는 데이터베이스에 선택적 인수의 쉼표로 구분 된 목록을 지정하는 기능을하고 싶은 것입니다 ...

Array optParams = rdr["parametersOpt"].ToString().Split(','); 

그러나 나는 확실하지 않았다 방법 해당 매개 변수를 경로 객체에 올바르게 고정하십시오. 그냥 익숙하지 않은 마이너 C# 구문 일 수 있습니다.

+2

Y 귀하의 질문에 대한 답변을 받아 들여야합니다. – SLaks

+0

죄송합니다 ... 그 일을 잊어 버린 것 같습니다 ... 감사합니다! 나는 분명히 멍청하다 ... – jcreamer898

답변

1

감사 :

여기 코드가 당신이 (다시, 나는이 작동합니다 확실하지 않다) 사전을 사용하려고하는 경우 같을 것이다 무엇 많은 문제와 어려움 후 ...

...

이 있었다
while (rdr.Read()) 
     { 
      Route invRoute = new Route(rdr["url"].ToString(), new MvcRouteHandler()); 

      RouteValueDictionary defaults = new RouteValueDictionary(); 
      defaults.Add("controller", rdr["controller"].ToString()); 
      defaults.Add("action", rdr["action"].ToString()); 

      Array arrParams = rdr["parametersOpt"].ToString().Split(','); 

      foreach (string i in arrParams) 
      { 
       defaults.Add(i, UrlParameter.Optional); 
      } 

      invRoute.Defaults = defaults; 

      routes.Add(rdr["name"].ToString(), invRoute); 
     } 

내 솔루션 ...

1

제가 잘못 생각한 것 같습니다. 익명의 개체 대신 MapRoute에 대한 3 번째 매개 변수로 IDictionary<string, object>을 사용할 수 있다고 생각합니다. MSDN 설명서는 일반적으로 MVC가 희소합니다.

나는 시험 proj를 빨리 채찍려고 노력했다. 내가 올바른 생각 과정에서 지적 된 @qstarin하는

 while (rdr.Read()) { 
      var defaults = new Dictionary<string, object>() { 
                   {"controller", rdr["controller"].ToString()}, 
                   {"action", rdr["action"].ToString()}, 
                   {"id", UrlParameter.Optional} 
                  }; 
      foreach (var param in rdr["parametersOpt"].ToString().Split(',')) { 
       defaults.Add(param, UrlParameter.Optional); 
      } 

      routes.MapRoute(
       rdr["name"].ToString(),    // Route name 
       rdr["url"].ToString(), // URL with parameters 
       defaults 
      ); 
     } 
+0

당신이 사용한 샘플의 빠른 샘플을 기억해 주시겠습니까? 그게 좋을거야! – jcreamer898

+0

내 대답을 편집했습니다. 익명의 객체 대신 사전을 사용할 수 있다는 것은 아직 확실하지 않습니다. 가능한 경우 매개 변수를 사용하여 수행중인 작업을 올바르게 이해하면이 기능이 작동해야합니다. –

+0

나는 그것을 작동 시키려고 노력하고있다. 나는 계속 당신을 게시 할 것이다! – jcreamer898

관련 문제