如何获得下个月的选定月份?

时间:2017-03-16 10:38:55

标签: c# asp.net

我有一个月份下拉列表,例如' 1月' '二月' ...'十二月'在asp.net c#

<asp:DropDownList ID="dlsalmonth" runat="server" class="form-control form-control-solid placeholder-no-fix">
    <asp:ListItem>January</asp:ListItem>
    <asp:ListItem>February</asp:ListItem>
    <asp:ListItem>March</asp:ListItem>
    <asp:ListItem>April</asp:ListItem>
    <asp:ListItem>May</asp:ListItem>
    <asp:ListItem>June</asp:ListItem>
    <asp:ListItem>July</asp:ListItem>
    <asp:ListItem>August</asp:ListItem>
    <asp:ListItem>September</asp:ListItem>
    <asp:ListItem>October</asp:ListItem>
    <asp:ListItem>November</asp:ListItem>
    <asp:ListItem>December</asp:ListItem>
</asp:DropDownList>

<div class="col-md-4" style="margin-top: 2%">
    <asp:TextBox ID="txtnextmonth" runat="server" CssClass="form-control" placeholder="Next Month" ReadOnly="true"></asp:TextBox>
</div>

我想要的是当我从这个列表中选择一个月时,我希望在我旁边的文本框中确切地显示下个月。假设我从这个下拉列表中选择二月,那么三月应该显示在我的文本框中。

3 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情

// ES5
handler(req, res) {
  somethingAsync
  .then(res.send.bind(res)) // <- res is explicitly bound to the saved function as its dynamic scope
}

并且也不要忘记添加 protected void dlsalmonth_OnSelectedIndexChanged(object sender, EventArgs e) { txtnextmonth.Text = dlsalmonth.SelectedItem.Text == "December" ? dlsalmonth.Items[0].Text : dlsalmonth.Items[dlsalmonth.SelectedIndex + 1].Text; } 或不会转到AutoPostBack="True"事件

答案 1 :(得分:1)

您可以使用SelectedIndexChanged事件,并在该事件中使用selectedIndex属性查找下个月。您将不得不照顾12月,因为下一个项目将是第一个不在下一个索引。您需要将AutoPostBack属性设置为true,以便在下拉选择更改时进行回发。您还需要绑定SelectedIndexChanged事件。

protected void dlsalmonth_SelectedIndexChanged(object sender, EventArgs e)
{
     txtnextmonth.Text = dlsalmonth.Items[(dlsalmonth.SelectedIndex+1)%12].Text;
}

如上所示,可以在服务器端上完成,但建议在客户端上执行以保存回发。你可以用这样的javascript来做到这一点。

在HTML中,绑定onchange javascript事件并使用this将其传递给dropdownlist对象。

<asp:DropDownList ID="dlsalmonth" runat="server" onchange="dlsalmonthChange(this);" class="form-control form-control-solid placeholder-no-fix">

在Javascript中,将脚本标记放在结束标记之前。获取文本框对象并分配下拉列表的下一个元素,照顾12月和1月。

 <script type="text/javascript" language="javascript">
        function dlsalmonthChange(sel)
        {   
            document.getElementById("<%= txtnextmonth.ClientID%>").value = sel.options[(sel.selectedIndex+1) % 12].text
        }
        dlsalmonthChange(document.getElementById("<%= dlsalmonth.ClientID%>")); // to set the textbox on form load
    </script>
</body>

我在页面加载时显式调用了dlsalmonthChange,以便在页面加载时第一次设置文本框。

答案 2 :(得分:1)

您可以使用客户端解决方案。这将消除额外的PostBack的需要。

<script type="text/javascript">
    $("#<%=dlsalmonth.ClientID %>").change(function () {
        var index = $(this).prop('selectedIndex') + 1;

        var nextValue = $("#<%=dlsalmonth.ClientID %> option").eq(index % 12).val();

        $("#<%=txtnextmonth.ClientID %>").val(nextValue);
    });
</script>