2013-04-28 3 views
0

DropDownListFor가 있습니다. 내 인덱스 페이지와 내 페이지 중 하나를 만듭니다. 페이지를 만듭니다. 두 드롭 다운리스트는 동일한 목적을 수행합니다. 사용자가 인덱스 페이지에서 지수 드롭 다운리스트에서 항목을 선택하면ASP.NET MVC 드롭 다운 선택 항목

는 내가 원하는 그것은 페이지가로드를 만들 때 세션에 GUID하고 선택한 항목의 값이, 내가 원하는 것을 저장한다 드롭 다운 목록에서 세션의 GUID를 기반으로 항목을 선택합니다.

사용자가 "만들기"를 클릭하고 작성 페이지로 이동하는 순간 나는 단지 객체를 설정하고 객체를 작성보기로 보냅니다.

편집 :

나는이 작업을 수행하여 생성 페이지를 통해 사용자를 보내고

:

Html.ActionLink("Create New Listing", "Create", null, new { @class = "btn btn-primary" })) 

어떻게보기에 위로의 selectedItem의 GUID를 보내려면 어떻게합니까?

답변

1

나는이 같은 상황을 생각한다. 여기

@model Models.IndexViewModel 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
@using (Html.BeginForm("SaveGuid", "Flow")) 
{ 
    Html.DropDownListFor(x => x.SelectedGuid, Model.Guids, new { onchange = "this.form.submit();" }); 
} 

색인 모델 :

public class IndexViewModel 
{ 
    public Guid SelectedGuid { get; set; } 
    public SelectList Guids { get; set; } 
} 

색인 및 SaveGuid 작업은 다음과 같이 다음은 인덱스보기는

private List<Guid> Guids = new List<Guid> { Guid.NewGuid(), Guid.NewGuid() }; // for testing only 

public ActionResult Index() 
{ 
    var model = new IndexViewModel { Guids = new SelectList(Guids, Guids.First()) }; 
    return View(model); 
} 

public ActionResult SaveGuid(IndexViewModel model) 
{ 
    Session["SelectedGuid"] = model.SelectedGuid;   
    return new RedirectResult("Create"); 
} 

보기는 다음과 같습니다 만들기 ..

@model MvcBootStrapApp.Models.CreateViewModel 
@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 
@using (Html.BeginForm("SaveGuid", "Flow")) 
{ 
    @Html.DropDownListFor(x => x.SelectedGuid, Model.Guids, new { onchange = "this.form.submit();" }); 
} 

@using (Html.BeginForm("SaveCreate", "Flow")) 
{ 
    // setup other controls 
    <input type="submit" value="Submit" /> 
} 

Cr 이 같은 eateViewModel ...

public class CreateViewModel 
{ 
    public Guid SelectedGuid { get; set; } 
    public SelectList Guids { get; set; } 

    // include other model properties 
} 

작성 및 CreateSave의 ActionResults는

public ActionResult Create() 
{ 
    Guid selectedGuid = Guids.First(); 
    if (Session["SelectedGuid"] != null) 
     selectedGuid = (Guid)Session["SelectedGuid"]; 

    return View(new CreateViewModel 
    { 
     Guids = new SelectList(Guids, selectedGuid), 
     SelectedGuid = selectedGuid 
    }); 
} 

public ActionResult SaveCreate(CreateViewModel model) 
{ 
    // save properties 

    return new RedirectResult("Index"); 
} 

내가 선택 가이 드의 변화를 모두 허용하는 두 가지 형태를 사용하는 모든 만들기 속성을 다시 게시 ... 같이 .

+0

Wellers 감사합니다. 나는 그걸 작동시킬 수 있었다. 당신은 믿을 수 없을 정도로 도움이되었습니다 – Subby

+1

문제가 없습니다 Subby : D – wellers

1

Session을 사용하려면 폼을 사용하여 ActionResult에 게시하여 드롭 다운 목록의 값을 저장 한 다음 만들기 페이지로 리디렉션하는 것이 좋습니다.

public ActionResult SaveGuid(Guid value) 
{ 
    Session["SelectedGuid"] = value; 
    return new RedirectResult("Create"); 
} 

그런 다음 Create ActionResult에서 세션 값을 Create View 모델에 전달하십시오. 보기 당신이 당신의 DropDownListFor에 전달 된 selectList의에서 선택한 옵션을 설정할 수 있습니다에서

public ActionResult Create() 
{ 
    var selectedGuid = (Guid)Session["SelectedGuid"]; 
    return View(new CreateViewModel { SelectedGuid = selectedGuid, /* include other properties */ }; 
} 

...

@Html.DropDownListFor(
    x => x.SelectedGuid, 
    new SelectList(Model.ListOfStuff, "Key", "Value", Model.SelectedGuid) 
) 
+0

안녕하세요. 코드 주위에 BeginForm을 래핑했지만 드롭 다운에서 선택 항목을 변경할 때마다 발생하므로 "만들기"버튼을 클릭 할 수 없습니다. – Subby

+0

Ok BeginForm 외부에서 단추를 이동하고 양식을 SaveGuid 메서드로 이동했습니다.지금까지는 모든 것이 잘 돌아가고 있지만 SaveGuid 메서드에서 Model을 다시 채우고 사용자가 인덱스 뷰로 돌아갈 수 있도록하면됩니다. – Subby

관련 문제