2013-10-24 6 views
0

"옵션"목록으로 사용할 드롭 다운 목록을 내 응용 프로그램에 표시하려고합니다. 사용자는 다른 곳에서 적용 할 수있는 옵션을 선택할 수 있습니다. 이 데이터는 사용자가 페이지에 머물러있는 한 지속됩니다. 이 객체가이 방법을 사용옵션으로 제공되는 드롭 다운 목록에서 선택한 값을 가져 와서 유지하십시오.

public class ResultsOptions 
{ 
    public string mStartOption { get; set; } 

    public List<SelectListItem> mListOptions { get; set; } 

    public ResultsOptions() 
    { 
     mListOptions = new List<SelectListItem>(); 
    } 
} 

:

[HttpGet] 
public ActionResult SetResults(string _submitButton, string _option) 
{ 
    mOptions.mListOptions = new List<SelectListItem>(); 

    foreach (var option in mListOptions) 
    { 
     if (!String.IsNullOrWhiteSpace(mResultOption)) 
     { 
      if (option == mResultOption) 
      { 
       SelectListItem item = new SelectListItem 
       { 
        Selected = true, 
        Text = option, 
        Value = option 
       }; 

       mOptions.mStartOption = option; 

       mOptions.mListOptions.Add(item); 
      } 
      else 
      { 
       SelectListItem item = new SelectListItem 
       { 
        Text = option, 
        Value = option 
       }; 

       mOptions.mListOptions.Add(item); 
      } 
     } 
     else 
     { 
      mOptions.mStartOption = ""; 

      SelectListItem item = new SelectListItem 
      { 
       Text = option, 
       Value = option 
      }; 
      mOptions.mListOptions.Add(item); 
     } 
    } 

    return PartialView(mOptions); 
} 

[HttpPost] 
public JsonResult SetResults(ResultsOptions _options) 
{ 
    if (!String.IsNullOrWhiteSpace(_options.mStartOption)) 
    { 
     mResultOption = _options.mStartOption; 

     mOptions.mStartOption = _options.mStartOption; 

     var selected = mOptions.mListOptions.First(_x => _x.Value == _options.mStartOption); 

     selected.Selected = true; 
    } 

    return Json(new { Message = "Option saved" }); 
} 

mListOptionsStandardSimple가 포함 된 문자열의 정적 목록입니다

는 여기에 드롭 다운리스트입니다. 당신이 짐작다시피, 나는 이런 식으로 내 레이아웃에 렌더링 부분보기하고 있어요 : 마침내 여기

<div> 
    <div class="float-left"> 
     @Html.ActionLink("Advanced Search", "AdvancedSearch", "Store") 
     @Html.ActionLink("Browse Promo Packs", "PackSearch", "Store") 
    </div> 
    <div class="float-right"> 
     @{ 
      Html.RenderAction("SetResults", "Store"); 
     } 
    </div> 
    <div class="clear"></div> 
</div> 

을 그리고 것은 부분보기입니다 : 그래서

@model MyApp.ViewModels.ResultsOptions 

<script type="text/javascript"> 
     $.post("/Store/SetResults/", $('#options').serialize(), 
       function(data) { 
        $('#divMessage').html(data.Message); 
       }); 
     </script> 

@using (Html.BeginForm(null, null, FormMethod.Post, new { @id = "options"})) 
{ 
    @Html.DropDownListFor(_model => _model.mStartOption, Model.mListOptions, new { @class = "nullify" }) 
    <input type="submit" name="_submitButton" value="Set"/> 
    <div id="divMessage"> 

    </div> 
} 

, 기본적으로 나는 것을 원하는 드롭 다운 목록은 항상 선택 목록으로 표시됩니다. 선택한 값은 나중에 사용되며 디스플레이에 거의 영향을 미치지 않습니다.

그러나 "설정"버튼을 클릭 할 때 내보기가 인 경우에만 부분보기가 렌더링되고 나머지는 비워집니다. 내가하고 싶은게 아니야. 누구든지 나를 도울 수 있습니까?

편집

내가 제안 몇 가지 JSON 결과에 노력하고있다,하지만 같은 문제가 : 얻은 결과 메시지가 나중에 표시 가져옵니다 것입니다.

+0

당신이 설정 버튼을 클릭 한 후 발생할까요? – WannaCSharp

+0

그럼 선택한 옵션 만 유지하고 싶습니다. 아무것도 바뀌지 않습니다. 나중에 다른 뷰/액션에서이 변수 ('mResultOption')를 참조하여 사용자가 선택한 옵션을 확인합니다. – hsim

답변

0

POST 방법으로 PartialView을 반환하기 때문입니다. 전체보기를 유지하고 html의 일부만 업데이트하려면 jQuery를 사용해야합니다.

편집 : 당신은 jQuery의 아약스 게시물을 사용하여 양식을 제출해야

return Json(new { Message = "Option saved" }); 

:

당신은 성공 메시지 또는 무언가를 제공하여 POST 액션 메소드에서 JsonResult을 반환 할 수 있습니다. 먼저 제출 버튼을

<input type="submit" id="submit-form" name="_submitButton" value="Set"/> 

은 다음 양식을 게시하여 스크립트의 클릭 이벤트를 처리보기에 ID를 할당합니다.

스크립트

$("#submit-form").click(function(ev) { 
     ev.preventDefault(); 
     $.post("/Controller/SetResults/", $("#IdOfYourForm").serialize(), 
      function(data) { 
      $("#divMessage").html(data.Message); 
     }); 
    }); 
관련 문제