2012-10-16 3 views
0

으로 다시 전달되지 않는 경우 해당 데이터를 잘 전달하는 드롭 다운 목록을 만들었습니다. 그러나 양식을 편집하려면 GET 연산의 이전 값이 양식에 채워지지 않습니다. MVC에 익숙하지 않아 간결한 예제가 훌륭합니다. 업데이트 - 무슨 일이 벌어지고 있는지 알고 있고 도움이 필요하다고 생각합니다. ddl에는 내 드롭 다운 데이터 만 포함되어 있으므로 편집보기의 모델에 드롭 다운 데이터 만 전달합니다. 폼의 데이터는 내 코드의 아래 변수 모델에 있습니다.보기에서 ddl과 모델을 전달하려면 어떻게해야합니까?결과 편집 데이터의 MVC3 컨트롤러에서 뷰

HERES 컨트롤러의 MY 코드

public ActionResult Edit(int id) 
     { 
      var ddl = new Users(); 
      ddl.DropDowns = userRepository.Getddl("Departments").Select(c => new SelectListItem 
      { 
       Value = c.DropdownID.ToString(), 
       Text = c.DropdownText 
      }); 
         var model = userRepository.GetUserId(id); 
      return View(ddl); 
     } 

     [HttpPost] 
     public ActionResult Edit(Models.Users users) 
     { 
      userRepository.UpdateUser(users); 
      return RedirectToAction("Index"); 
     } 

VIEW

@model Models.Users 

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <div id="stylized" class="myform"> 
    <fieldset> 
     <legend>User Account</legend>  

     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserFullName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserFullName) 
      @Html.ValidationMessageFor(model => model.UserFullName) 
     </div> 
     <br/> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserName) 
      @Html.ValidationMessageFor(model => model.UserName) 
     </div> 
     <br/> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.ProfileName) 
     </div> 
      <div class="editor-field"> 
     @Html.DropDownListFor(x=> x.DeptID,new SelectList(Model.DropDowns,"Value","Text"),"Select")  

     </div> 
+0

어떤 오래된 값을 언급하고 있습니까? 사용자 ID는 무엇입니까? –

+0

양식의 데이터 세부 정보를보고 편집을 클릭하면 사용자가 양식을 편집 할 수 있도록 해당 세부 정보가 표시됩니다. 대신 빈 양식을 얻습니다. 세부 사항에서 데이터는 모델에 있습니다. –

+0

exaplin 좀 더 하시겠습니까? 어느 뷰/액션에서 데이터가 올지 기대하십니까? 어떤 데이터?보기가 어떻게 보이나요? – Shyju

답변

1

당신이보기에 잘못된 개체를 전달하는 드롭 다운을 작성, 대안 viewbag을 통해 아래로 드롭에 합격하거나, 할 수 있습니다. 당신이 당신의 Repositary 방법에서 얻은 obeject를 전달하십시오. 당신의 GetUserID 방법을 가정하면 User 클래스의 객체를 반환하고 당신의 사용자 개체 당신은 모델과 뷰에있는 DropDownList를 전달해야

public ActionResult Edit(int id) 
{ 
    var model = userRepository.GetUserId(id); 
    model.DropDowns = userRepository.Getddl("Departments"). 
              Select(c => new SelectListItem 
     { 
      Value = c.DropdownID.ToString(), 
      Text = c.DropdownText 
     });      
    return View(model); 
} 
+0

안녕하세요 Shyju, 자세히보기에서 편집 버튼을 클릭하면 빈 양식이 나타납니다 ... 데이터를 그 양식으로 유지하길 원합니다. 내 Httppost가 잘 작동합니다. –

+1

@StoneTempleAviators : 업데이트 된 답변보기 – Shyju

1

당신이보기에 새 (빈) User을 전달하고 있습니다. 대신 모델을 뷰에 전달하려고합니다.

return View(model); 
+0

올바른 ....하지만 모델과 ddl을 어떻게 전달합니까? 다른 말로하면 모델에 ddl을 어떻게 추가할까요? –

+0

필요한 모든 속성을 가진 뷰 모델을 만듭니다. 컨트롤러 액션에서 그것을 채우고 뷰로 전달하십시오. –

1

질문을 올바르게 이해하면 수정보기에 사용자 데이터가 표시되지 않습니다. 대신 그것은 마치 "새로운"행동 인 것처럼 공백의 형태를 보여주고 있습니까?

잘못된 모델을 지나치게 전달하고 있다고 생각합니다. 모델을 전달해야하지만 ddl을 전달합니다 (ddl은 새로운 사용자 임).

당신은 당신의 사용자를 포함하는 뷰 모델뿐만 아니라 목록

1

에서 DropDowns 속성이 있습니다. 기본 객체는 모델이어야합니다. 이는 뷰가 기반으로하는 것이기 때문입니다. 그러나, 당신은 또한뿐만 아니라보기에 DropDownList로를 얻을 필요가 있기 때문에, 당신은 모델에 첨부하거나 ViewBag를 통해 추가 할 수 있습니다 :

public ActionResult Edit(int id) 
{ 
    var ddl = new Users(); 
    ddl.DropDowns = userRepository.Getddl("Departments").Select(c => new SelectListItem 
    { 
     Value = c.DropdownID.ToString(), 
     Text = c.DropdownText 
    }); 

    var model = userRepository.GetUserId(id); 

    // When accessing this from the view, you will 
    // call it by ViewBag.DepartmentsDropdown 
    ViewBag.DepartmentsDropdown = dll; 

    return View(model); 
} 
+0

편집보기에서 DropDown을 얻는 방법. @ Html.DropDownListFor (x => x.DeptID, 새 SelectList (Model.DropDowns, "Value", "Text"), "Select"). 그래서 ViewBag.DepartmentsDropdown으로 대체할까요? –

+0

@StoneTempleAviators :이 뷰는 (컨텍스트에 따라) 생각하는 사용자를 편집하기위한 것으로, 모델은 드롭 다운에있는 것보다는 사용자에 관한 것이어야합니다. 예, 모델에 드롭 다운을 배치하지 않으려면 ViewBag.DepartmentsDropdown으로 변경해야합니다. –

+0

글쎄 내가 해냈어 : @ Html.DropDownListFor (x => x.DeptID, 새로운 SelectList (@ ViewBag.DepartmentsDropdown, "Value", "Text"), "Select") 그리고 그 didnt 작품. 그래서 저는 방금 만든 @ ViewBag.DeparmentDropdown을했고 내 페이지의 Model.Users를 표시했습니다. –

0

는 예를 만듭니다. UsersViewModel 클래스에서 드롭 다운, 사용자 목록 및 전달할 다른 모든 데이터를 보려면 SelectList와 같은 속성을 피드에 추가합니다. 뷰를 반환하기 전에이 클래스의 인스턴스를 초기화하고 속성을 설정하여 모델로 전달하십시오.

.. 
var model = new UsersViewModel 
{ 
    Users = new SelectList(..), 
    ... 
} 
return View(model); 

그런 다음 해당 ViewModel에서 오는 모든 개체를 참조 할 수 있습니다.

0

모두들 덕분에 해결할 수있었습니다. 나는 내가 가지고 있었던 모델을 다시 만들고 싶지 않았다. 데이터를 보지 못하는 이유는 모델을 전달하지 못하기 때문입니다. 그래서 내 드롭 다운 정보를 보유하려면 ViewData를 만들어야합니다. 뒤늦은 지혜에서 모델에 더 많은 시간을 보내는 것이 나을 것입니다. 그래서 이런 문제에 빠지지 마십시오. 모든 사람들의 도움 없이는 나는이 사실을 알지 못했을 것입니다. 보기

@ Html.DropDownListFor (모델 => 모델에서 컨트롤러

ViewData["DepartmentDD"] = new SelectList(ddl.DropDowns, "Value", "Text"); 

에서

.DeptID, (SelectList) ViewData [ "DepartmentDD"], "Choose one")

관련 문제