2013-07-02 102 views
1

嗨我有一個需要日期的報表模型。他的日期可以是今天,昨天或日期範圍。將模型綁定到單選按鈕

public class DateModel 
{   
    public bool Today { get; set; } 
    public bool Yesterday { get; set; } 
    public bool DateRange { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

此模型必須爲視圖。 「今天」,「昨天」,「日期範圍」的單選按鈕以及「開始」和「結束」日期的文本框。

<tr> 
    <td> 
     @Html.RadioButton("SelectedDate", "Yes", true, new { postData= "Today" }) Today 
    </td> 
</tr> 
<tr> 
    <td> 
     @Html.RadioButton("SelectedDate", "No", false, new { postData= "Yesterday" }) Yesterday 
    </td> 
</tr>  
<tr> 
    <td> 
     @Html.RadioButton("SelectedDate", "No", false, new { postData= "CallDateRange" }) Call Date Range 
    </td> 
</tr> 

當視圖回傳時,我怎樣才能得到什麼單選按鈕被選中?

+0

這將很大程度上取決於你如何」重新發送您的單選按鈕,以及視圖如何綁定。你可以用你的單選按鈕的區域編輯你的文章嗎? –

+0

@StevenVondruska更新。 –

回答

10

看看你的代碼,總體上可能有更好的方法。首先,創建您有可用的單選按鈕類型/值的枚舉:

public enum DateEnum { 
    Today, 
    Yesterday, 
    DateRange 
} 

然後修改DateModel使用該枚舉

public class DateModel 
{   
    public DateEnum SelectedDate { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

最後,更新您認爲您與使用結合同時採用RadioButtonFor()

<tr> 
    <td> 
     @Html.RadioButtonFor(x => x.SelectedDate, DateEnum.Today) Today 
    </td> 
</tr> 
<tr> 
    <td> 
     @Html.RadioButtonFor(x => x.SelectedDate, DateEnum.Yesterday) Yesterday 
    </td> 
</tr>  
<tr> 
    <td> 
     @Html.RadioButtonFor(x => x.SelectedDate, DateEnum.DateRange) Call Date Range 
    </td> 
</tr> 

然後在表單提交的枚舉,你會看着SelectedDate,以確定哪些收音機,但噸用戶已選擇。

+0

謝謝。但selectedDate值始終是DateRange?是否有一個原因?我哪裏做錯了?謝謝 –

+0

我在我的機器上安裝了一個小型測試項目,代碼和它的工作原理。我會使用瀏覽器或Fiddler中的開發人員工具查看瀏覽器發佈的內容,以查看瀏覽器嚮應用程序報告的內容。還要確保在頁面上沒有另一個具有相同名稱/值的表單元素。 –

+0

謝謝史蒂夫。我如何使用這種語法來更改名稱? –

2

您可以修改你的模型是這樣的:

public enum DateType { 
    Today, 
    Yesterday, 
    DateRange 
} 

public class DateModel 
{   
    public DateType DateType { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

而且使用它的觀點:

@model DateModel  

@Html.BeginForm("ProcessForm") {  

    @* Populate radio *@ 

    @Html.RadioButtonFor(x => x.DateType , DateType.Today) Today 
    @Html.RadioButtonFor(x => x.DateType , DateType.Yesterday) Yesterday 
    @Html.RadioButtonFor(x => x.DateType , DateType.DateRange) DateRange 

    @* Range *@ 

    @Html.TextBoxFor(x => x.StartDate) Start date 
    @Html.TextBoxFor(x => x.EndDate ) End date 

    <input type="submit" /> 
} 

通模式控制器

public ActionResult ProcessForm(DateModel model) { // here you get model from form 
    // .. 
} 
相關問題