Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Ext.Net X.GetCmp方法不适用于FileUploadField_Vb.net_Ext.net - Fatal编程技术网

Vb.net Ext.Net X.GetCmp方法不适用于FileUploadField

Vb.net Ext.Net X.GetCmp方法不适用于FileUploadField,vb.net,ext.net,Vb.net,Ext.net,这是我的第一个问题。我几乎每天都在堆栈溢出中,但这是我第一次自己找不到答案,不得不在这里发布 我使用Ext.Net动态创建页面(在VB.Net中,如果有必要的话),基于XML配置,使用各种控件和任意数量的控件。因此,对于XML中的每个字段,我创建控件并为其分配一个ID(ID来自XML)。我有一个“提交”按钮,单击该按钮后,再次解析XML,获取每个字段的ID,并使用Ext.Net.X.GetCmp获取该ID的控件。然后,一旦我有了控制权,我就得到了值并用它做了一些事情。除了控件类型FileUplo

这是我的第一个问题。我几乎每天都在堆栈溢出中,但这是我第一次自己找不到答案,不得不在这里发布

我使用
Ext.Net
动态创建页面(在VB.Net中,如果有必要的话),基于XML配置,使用各种控件和任意数量的控件。因此,对于XML中的每个字段,我创建控件并为其分配一个ID(ID来自XML)。我有一个“提交”按钮,单击该按钮后,再次解析XML,获取每个字段的ID,并使用
Ext.Net.X.GetCmp
获取该ID的控件。然后,一旦我有了控制权,我就得到了值并用它做了一些事情。除了控件类型
FileUploadField
之外,一切都像一个魔咒。根据,出于某种原因,
GetCmp
不能与
FileUploadField
一起工作

所以,我的问题是:有没有办法根据控件的ID获取
FileUploadField
控件?而且,我只想知道,为什么
GetCmp
不能使用这种控件

事先非常感谢,我的英语很差,很抱歉

编辑:

好的,我已经将我的Ext.Net更新到最新版本(2.2)。现在一切看起来都很奇怪,但如果它起作用,那也没关系。除了外表,我看不出行为有任何变化。GetCmp仍然给我同样的信息。顺便说一下,X.GetCmp(Ext.Net.FileUploadField的)(ControlID)给了我一个FileUploadField,而不是null,即使我没有创建控件。唯一的问题是hasFile=false总是存在,并且filebytes是空的

编辑2:

我已经运行了您的示例代码,它的工作方式非常好。我开始认为“isUpload”是关键。我整天都在谷歌上搜索,想知道我在哪里以及为什么要写这个{isUpload=true},但我没有看到任何有用的东西。你能给我解释一下吗?仅适用于DirectMethods?这是强制性的吗?非常感谢

编辑3:


我现在觉得自己太傻了。它起作用了。刚刚在javascript中的DirectMethod调用中添加了一个简单的isUpload:true。这么多天来解决这件蠢事。对于下一个家伙:检查你的isUpload;)

您可以使用简单的javascript:

var fileinput = document.getElementById("fileinput");
由于javascript只搜索DOM,所以需要小心。每个Ext.Net组件将获得一堆包装器和子组件以及“不必要的”兄弟/父/子组件(用于标题、标签、底部和顶部栏等等)

如果已为控件提供ID,则应能够通过以下方式获取该控件:

App.{control-id}
这将返回构造函数。您应该能够随时使用应用程序名称空间从ExtJS获取
FileBytes
(请参阅)

FileBytes的完成get如下所示:

App.{control-id}.FileBytes
所以,我的问题是:是否有某种方法可以基于其ID获取FileUploadField控件

只是重新创建那个控件。在一个AJAX请求(DirectEvent/DirectMethod)期间呈现控件,除非手动重新创建,否则它不会在另一个AJAX请求期间持久化。它的行为与标准ASP.NET控件相同

控件可以在Page_Init中重新创建,并且必须使用相同的ID重新创建。在这种情况下,控件的LoadPostData应该从POST集合中提取正确的值

还有,我只是想知道,为什么GetCmp不能使用这种控件

它在Ext.NETV1中不起作用,但在Ext.NETV2中起作用。下面是一个示例

不过,它只是从帖子中提取一个文件。GetCmp()返回一个代理控件,它不是真正的控件。这只是一种方便的方法,可以提取动态呈现控件的POST值,并在客户端更新这些控件(更改其属性并调用其方法)


受保护的无效RenderFileUploadField(对象发送方,DirectEventArgs e)
{
FileUploadField FileUploadField=新FileUploadField()
{
ID=“FileUploadField1”,
宽度=300,
听众=
{
改变=
{
Handler=@“App.direct.GetFileName(this.id{
isUpload:true
});"
}
}
};
this.Form.Controls.Add(fileUploadField);
fileUploadField.Render();
}
[直接法]
public void GetFileName(字符串id)
{
X.Msg.Alert(“FileName”,X.GetCmp(“FileUploadField1”).PostedFile.FileName.Show();
}
Ext.NET v2示例

感谢Vogel的回答。我不使用Dail提供的解决方案,因为我不想在用户按下“ok”按钮之前做任何事情,而不是在用户上传单个文件时。假设我有一个表单,有两个上传字段和一个文本字段。然后,如果用户选择2个文件,然后按Ok,这些文件将被发送到另一台服务器。如果他不按Ok键,进程将被取消,因此服务器在其状态下不会更改任何内容。实际上,这比带有Ok按钮的表单复杂得多,但我不想详细说明,因为我认为这与此无关。问题是我想对与fileuploadfield无关的事件做出反应,所以我需要从外部获取control.FileBytes。但是我找不到控件,如果你知道我的意思的话。关于你的解决方案,如果我想得到文件的内容,我不能只做fileinput.FileBytes,我想是吧?@JoséRamón这是用于
的,你可以通过
document.getElementById(“fileinput”).files[0]获得它的文件
并将其作为
内容类型:多部分/表单数据发送
。关于其他事情。你不能转到App.fileinput.FileBytes吗?为什么需要使用X.GetCmp,为什么不使用客户端应用程序{ID}?首先非常感谢你的帮助。因此,它在Ext.Net2中是固定的。伟大的我读了那本书
<%@ Page Language="C#" %>

<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>

<script runat="server">
    protected void RenderFileUploadField(object sender, DirectEventArgs e)
    {
        FileUploadField fileUploadField = new FileUploadField()
            {
                ID = "FileUploadField1",
                Width = 300,
                Listeners =
                {
                    Change =
                    {
                        Handler = @"App.direct.GetFileName(this.id, {
                                        isUpload : true
                                    });"
                    }
                }
            };
        this.Form.Controls.Add(fileUploadField);
        fileUploadField.Render();
    }

    [DirectMethod]
    public void GetFileName(string id)
    {
        X.Msg.Alert("FileName", X.GetCmp<FileUploadField>("FileUploadField1").PostedFile.FileName).Show();
    }
</script>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Ext.NET v2 Example</title>
</head>
<body>
    <form runat="server">
        <ext:ResourceManager runat="server" />
        <ext:Button
            runat="server"
            Text="Create a FileUploadField"
            OnDirectClick="RenderFileUploadField" />
    </form>
</body>
</html>