2012-10-03 156 views
0

我使用asp.net mvc3創建單選按鈕列表。我需要從控制器獲取列表並將其顯示在視圖中。對於視圖中的每個對應列表,我有YES/NO單選按鈕,並且需要在列表中爲每個項目生成一個字符串,如果單選按鈕爲是,則爲1 else 0.創建單選按鈕列表

因此,例如,如果我有然後我需要在視圖中顯示它們(默認值爲false),然後在提交時生成一個字符串,其中字符串中的每個字符對應於列表中每個項目的布爾值。

任何人都可以給我一個想法如何在mvc3中做到這一點? 感謝您的幫助提前。

UPDATE

這裏是我想要的代碼:

我的類有兩個屬性:

public List<Module> lstModules { get; set; } // gives the list of items 

public List<bool> IsModuleActivelst { get; set; } //gives the bool values 

在這裏,在控制器我需要創建一個列表和相應的布爾值爲了那個原因。我被困在這裏,無法生成代碼。反正我會解釋僞

public class MMController : Controller 
{ 
    [HttpGet] 
    public ActionResult Clients() 
    { 
     //I need to generate the list - using lstModules prop 

     // Assign the list with the predefined values and if not just give the default values- using IsModuleActivelst prop 

    } 
} 

在這裏,我創建視圖:

@foreach (var i in Model.lstModules) 
{ 
    <div class="formlabel"> 
     <div align="right" class="label"> 

      @Html.LabelFor(model => model.lstModules):</div> 
    </div> 

    <div class="formelement"> 
    <label for="radioYes" class="visible-enable" style="cursor:pointer;position:relative;"> 
       @Html.RadioButtonFor(model => model.IsModuleActivelst, "True", new { @id = "radioYes", @style = "display:none;" }) 
       <span>Yes</span></label> 
       <label for="radioNo" class="visible-disable" style="cursor:pointer;position:relative;"> 
       @Html.RadioButtonFor(model => model.IsModuleActivelst, "False", new { @id = "radioNo", @style = "display:none;" }) 
       <span>No</span></label> 
    </div> 
} 
+0

什麼你迄今已試過嗎?向我們展示一些代碼。 –

+0

@KapilKhandelwal:我已更新我的代碼 – NealCaffrey

回答

1

我建議你通過定義將代表你需要與合作的信息視圖模型開始特定的觀點。到目前爲止,您已經提到了一個模塊列表,其中用戶需要設置模塊是否處於活動狀態或者不使用單選按鈕(我個人會使用複選框作爲True/False狀態,但這是您自己的決定):

public class ModuleViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
} 

public class MyViewModel 
{ 
    public IEnumerable<ModuleViewModel> Modules { get; set; } 
} 

然後,你可以定義一個控制器,將填充視圖模型,渲染的形式,並有另一個動作來處理表單提交:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      // TODO: this information could come from a database or something 
      Modules = new[] 
      { 
       new ModuleViewModel { Id = 1, Name = "module 1", IsActive = true }, 
       new ModuleViewModel { Id = 2, Name = "module 2", IsActive = true }, 
       new ModuleViewModel { Id = 3, Name = "module 3", IsActive = false }, 
      } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return Content(
      string.Format(
       "Thank you for selecting the following values: {0}", 
       string.Join(" ", model.Modules.Select(x => string.Format("model id: {0}, active: {1}", x.Id, x.IsActive))) 
      ) 
     ); 
    } 
} 

最後一部分是定義視圖(~/Views/Home/Index.cshtml):

@model MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Modules) 
    <button type="submit">OK</button> 
} 

最後,它會自動呈現在Modules集合中的每個元素對應的編輯模板 - 請注意,模板的名稱和位置是非常重要的 - ~/Views/Shared/EditorTemplates/ModuleViewModel.cshtml

@model ModuleViewModel 

<div> 
    @Html.HiddenFor(x => x.Id) 
    @Html.HiddenFor(x => x.Name) 

    <h2>@Html.DisplayFor(x => x.Name)</h2> 
    @Html.Label("IsActiveTrue", "Yes") 
    @Html.RadioButtonFor(x => x.IsActive, "True", new { id = Html.ViewData.TemplateInfo.GetFullHtmlFieldId("IsActiveTrue") }) 
    <br/> 
    @Html.Label("IsActiveFalse", "No") 
    @Html.RadioButtonFor(x => x.IsActive, "False", new { id = Html.ViewData.TemplateInfo.GetFullHtmlFieldId("IsActiveFalse") }) 
</div> 
+0

感謝您的這個好的答案。我的疑問是如何創建字符串?我不明白這部分 - string.Join(「」,model.Modules.Select(x => string.Format(「model id:{0},active:{1}」,x.Id,x.IsActive)) – NealCaffrey

+1

這是LINQ,它與ASP.NET MVC完全沒有關係,你不明白什麼?如果你需要學習LINQ,這裏有一個好的開始:http://code.msdn.microsoft.com/101- LINQ-Samples-3fb9811b在我的示例中,我基本上循環了模型的'Modules'集合屬性,並且爲每個元素構建一個包含模塊Id的字符串以及用戶是否選擇它是否處於活動狀態(IsActive布爾屬性)。我將結果傳遞給string.Join方法,以便通過空格分隔它們。 –

+0

現在是啊!完美工作!感謝您的解決方案! – NealCaffrey