2013-07-02 167 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 
    // .. 
} 
相关问题