2010-11-21 9 views
1

이전에이 객체가 요청되었지만 객체 (Restaurant)가 있고 해당 객체에 대한 상세보기가 있는지 확실하지 않습니다. 그 세부적인 견해에, 나는 레스토랑이 제공하는 요리 목록을 갖고 싶다. 나는 또한 이용 가능한 요리의 dropdownlist을 가지고 있고, "Add"버튼을 클릭하는 능력을 가지고 싶어한다. 그리고 그것은 그 요리를 레스토랑에 추가한다. 기본 키 ID가있는 Cuisine 테이블의 요리 ID에 외래 키가있는 RestaurantCuisine 테이블 (Entity Framework 사용)이 있습니다.MVC2 다른 객체에 객체 컬렉션을 추가하십시오.

이제 내 질문에, 어떻게해야합니까? 나는 sortof의 개념을 Create 뷰와 Create 뷰 포스트의 개념으로 이해하지만이 경우에는 Restaurant 객체를 게시하지 않을 것이다. 그래서 식당 ID와 요리 ID를 얻으면 식당 요리 컬렉션에 추가 할 수 있습니까?

이제 더 자세히 조사한 후에 잘못된 질문을 던졌을 것입니다. 내 실제 문제는 레스토랑의 세부 정보를 표시하는 뷰가 있고 컨트롤러에 내 세부 정보 기능이 있다는 것입니다. 이것은 잘 작동합니다. 내가하고 싶은 다음 단계는이 레스토랑이 제공하는 사용 가능한 메뉴가있는 드롭 다운 목록이 있고 그 옆에 '추가'버튼이 있습니다. '추가'버튼을 클릭하면 드롭 다운 목록에있는 항목의 값이 식당 객체의 요리 컬렉션에 추가됩니다.

"쉽게"가능합니까? 나는 MVC2에 대한 나의 믿음을 잃기 시작했다 : (

좋아, 마지막으로 시도해라. 내가 누구에게 dropdownlist (나는 지금 이것을 만들었다)를 가지고 있고 "Add"버튼 그 옆에있는 드롭 다운 목록에서 선택한 값을 얻으시겠습니까?

답변

0

MVC에서 VB.Net을 사용하려는 분들에게 제가기도하는 것입니다. C#에서 사용할 수있는 구문을 사용할 수 없습니다. 원래 질문에 대한 대답까지는 질문의 즉각적인 불길을 일으킨 것 같습니다.

내 문제를 분석 한 후, 무엇보다 먼저, 르 (le). 내가 무엇을하려고했는지 명확히 한 다음 내가 한 일을 설명한다. 목표는 객체를 갖는 것이 었습니다 (제 경우에는 식당). 그리고 그 객체 (레스토랑)에 지정할 수있는 세부 정보보기에 표시되는 속성 (내 경우에는 요리) 목록을 갖고 싶었습니다. 이 속성은 내가 CuisineId, CuisineId, RestaurantIu, CuisineId라는 다른 테이블에 레코드를 쓰는 레스토랑 (CuisineId, 이름, 설명)에 설치 한 요리였습니다. 그래서, 요리의 목록을 얻는 것이 첫번째 작업이었고 그것들을 드롭 다운 목록에 표시하게했습니다. 즉,이 세부에서 요리의 selectList의를 작성하여 수행 된 CuisineRepository를 생성하고 모든 요리의 목록을 가져 오는 함수를 호출하여 기능을 볼 : 당신이 selectList의 등이 설정을 일단

Dim cuiss As New CuisineRepository() 
     ViewData("Cuisines") = New SelectList(cuiss.FindAllCuisines().ToList(), "CuisineId", "Name") 

, 그것은 간단하게 표시 할 수 다음을 수행하여보기 :

<h3>Cuisines:</h3> 
<br /> 
<%= Html.DropDownList("Cuisines")%> 

그래서이 문제는 실제 문제였습니다. DropDownList의 값에 바인딩되는 ActionLink를 원했습니다. 나는이 시도에서 실패했다. 그러나 다행히, 내 jQuery를 먼지가없는 그래서 나는 다음을 수행하여 약간의 마법을 수행 : 그래서

<script type="text/Javascript"> 
    $(document).ready(function() { 
     $('#Cuisines').change(function (e) { 
      $('#SelectedCuisine').val($('#Cuisines').val()); 
      setHref($(this).val()); 
     }); 

     setHref($('#Cuisines').val()); 
    }); 

    function setHref(val) { 
     if (val) { 
      $("#addCuisine").attr('href', '/Restaurant/AddCuisine/' + $('#RestaurantId').val() + '?cuisineId=' + val); 
     } 
    } 

</script> 
<h3>Cuisines:</h3> 
<br /> 
<%= Html.DropDownList("Cuisines")%> 
<a id="addCuisine" href="">Add</a> 

, 당신이 볼 수있는 사용자가 선택한 요리를 변경, 나는 단순히 앵커의 HREF을 수정합니다.그런 다음, 내 컨트롤러, I는 기능 설정이 요리를 추가하고 레스토랑에서 요리를 제거해야합니다 :

Function AddCuisine(ByVal id As Guid, ByVal cuisineId As String) As ActionResult 
     Try 
      If ModelState.IsValid Then 
       'Dim selcuisInp As HtmlInputHidden = ViewData("SelectedCuisine") 
       Dim selectedCuisineId As Guid = New Guid(cuisineId) 

       Dim rc As New RestaurantCuisine 
       rc.RestaurantCuisineId = Guid.NewGuid 
       rc.RestaurantId = id 
       rc.CuisineId = selectedCuisineId 
       'rc.CuisineId = New Guid(selList.SelectedValue.ToString) 
       rc.CreatedDate = DateTime.Now() 
       'rc.CreatedBy = 
       db.AddToRestaurantCuisines(rc) 
       db.SaveChanges() 
      End If 

      Return RedirectToAction("Details", New With {.id = id}) 
     Catch e As Exception 
      Dim innerE As String = e.InnerException.ToString 
      Return RedirectToAction("Details", New With {.id = id}) 
     End Try 
    End Function 

    Function DeleteRestaurantCuisine(ByVal id As Guid) As ActionResult 
     Dim rc = (From rcs In db.RestaurantCuisines 
        Where rcs.RestaurantCuisineId = id 
        Select rcs).Single() 

     Dim rid As Guid = rc.RestaurantId 

     Try 
      db.RestaurantCuisines.DeleteObject(rc) 
      db.SaveChanges() 

      Return RedirectToAction("Details", New With {.id = rid}) 

     Catch ex As Exception 
      Return RedirectToAction("Details", New With {.id = rid}) 
     End Try 
    End Function 

을 주목 RedirectToAction을. 자세히보기가 필요하고 어디에서나 구문을 찾을 수없는 객체 (레스토랑)의 ID를 전달해야했습니다. 마지막으로, 잠시 동안 검색을 한 후에이 사람이 컨트롤러에 대한 몇 가지 예를 가지고 있고 운좋게도 C#과 VB의 예제를 제공한다는 사실을 알게되었습니다. RedirectToAction에 routeValues를 추가하려면 새리스트를 선언하고와 인라인을 사용하고 이전 기간으로 값을 추가 (.) :

Return RedirectToAction("Details", New With {.id = rid}) 

나는이 사람을 도움이되기를 바랍니다. MVC 사용에 대한 결정이 확실히 달라졌습니다. 나가 길가에 많은 방책으로 달릴 것이라는 점을 나가 알고 있더라도 나는 100 % 판매된다.

+0

당신은 용감한 사람입니다. – rboarman

관련 문제