Ext.Net使用GetCmp检索DateField

时间:2014-11-18 09:23:21

标签: c# asp.net extjs ext.net

我在c#中的ASP + Ext.Net中有一个网页,我在其中基于XML动态创建一些控件(文本字段,组合框,日期字段等)。当用户按下按钮时,我必须读取这些控件的值并对其执行某些操作,因此我使用Ext.Net.X.GetCmp来执行此操作。它适用于所有控件,除非控件是日期控件(T = DateField),除非它具有自定义日期格式(例如“dd MMM yyyy”)。在这种情况下,当我尝试检索控件时,它会返回FormatException。

重现问题的一个非常简短的例子:

ASPX:

<%@ Page Language="C#" CodeBehind="Sandbox.aspx.cs" Inherits="MyNamespace.Sandbox" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Multiple DateFields with DateRange Validation - Ext.NET Examples</title>
    <link href="/resources/css/examples.css" rel="stylesheet" />
</head>
<body>
    <form runat="server">
        <ext:ResourceManager runat="server" />


        <ext:Window 
            runat="server" 
            Width="350"
            Title="DateRange"
            Icon="Date"
            Closable="false"
            BodyPadding="5"
            Layout="Anchor"
            DefaultAnchor="100%">
            <Items>
                <ext:Button ID="MyTestButton" runat="server" Flex="1" Text="Test" ToolTip="Click here to crash" OnDirectClick="ButtonClicked" />
                <ext:FieldContainer
                    ID="MyFieldContainer"
                    runat="server"
                    >
                    <Items>
                        <%--HERE I CREATE A DATEFIELD IN CODE BEHIND--%>
                    </Items>
                </ext:FieldContainer>
            </Items>           
        </ext:Window>                
   </form>
</body>
</html>

代码落后(C#):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

namespace MyNamespace {
    public partial class Sandbox : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {
            if (!this.Page.IsPostBack) {
                CreateDateField();
            }
        }

        protected void CreateDateField() {
            DateField date = new DateField() {
                ID = "MyDateField",
                //FieldLabel = "From",
                Format = "dd MMM yyyy",
                SubmitFormat = "dd/MM/yyyy",
                Value = "01 Jun 2014"
            };
            date.AddTo(MyFieldContainer);
        }

        [DirectMethod]
        public void ButtonClicked(object sender, DirectEventArgs e) {
            // Try to retrieve the control.
            // Spoiler alert: it will crash
            DateField date = Ext.Net.X.GetCmp<DateField>("MyDateField");
            // Change the date to see if it worked.
            date.Value = "02 Jun 2014";
        }
    }
}

我得到的错误只是一个System.FormatException:String未被识别为有效的DateTime。我试过玩SubmitFormat属性没有运气。同样,使用默认日期格式它可以正常工作,但客户的要求是拥有自定义日期格式。

我做错了什么?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

X.GetCmp从POST中读取一个值,但它不知道格式,因为它在POST中不存在。

您必须手动指定格式。与使用。

创建DateField的格式相同
X.GetCmp<DateField>("dfDate", new DateField.Config() { Format = "dd MMM yyyy"});

A bit more details about the X.GetCmp feature