我在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属性没有运气。同样,使用默认日期格式它可以正常工作,但客户的要求是拥有自定义日期格式。
我做错了什么?非常感谢您的帮助。
答案 0 :(得分:1)
X.GetCmp从POST中读取一个值,但它不知道格式,因为它在POST中不存在。
您必须手动指定格式。与使用。
创建DateField的格式相同X.GetCmp<DateField>("dfDate", new DateField.Config() { Format = "dd MMM yyyy"});