Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
在asp.net mvc中从xml创建web表单_Asp.net_Asp.net Mvc - Fatal编程技术网

在asp.net mvc中从xml创建web表单

在asp.net mvc中从xml创建web表单,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我被分配到某个项目的web部件。该项目中有两个部件, 在窗口部分,用户可以创建自己的自定义模板 和VisualStudioIDE一样,您可以添加表单和其他控件。然后,我们保存此模板 我的职责是从这个xml文件中读取数据并创建webform。 对于web部件,仅显示从窗口部件创建的信息。 我们的xml文件格式如下所示。对于web部件,我们使用asp.net mvc在c#.net中开发 <Object type="System.Windows.Forms.Form"> <Obj

我被分配到某个项目的web部件。该项目中有两个部件, 在窗口部分,用户可以创建自己的自定义模板 和VisualStudioIDE一样,您可以添加表单和其他控件。然后,我们保存此模板 我的职责是从这个xml文件中读取数据并创建webform。 对于web部件,仅显示从窗口部件创建的信息。 我们的xml文件格式如下所示。对于web部件,我们使用asp.net mvc在c#.net中开发

<Object type="System.Windows.Forms.Form">
  <Object type="System.Windows.Forms.Label">
    <Property name="Name">lblCity</Property>
    <Property name="Text">City</Property>
  </Object>
  <Object type="System.Windows.Forms.TextBox">
    <Property name="Name">txtCity</Property>
    <Property name="Text">England</Property>
  </Object>
  <Object type="System.Windows.Forms.Label">
    <Property name="Name">lblNRIC</Property>
    <Property name="Text">NRIC</Property>
  </Object>
  <Object type="System.Windows.Forms.TextBox">
    <Property name="Name">txtNRIC</Property>
    <Property name="Text">ABC01234</Property>
  </Object>
  <Object type="System.Windows.Forms.RadioButton">    
    <Property name="Name">RadioButton1</Property>    
    <Property name="Text">OptionA</Property>    
  </Object>  
  <Object type="System.Windows.Forms.CheckBox">
    <Property name="Name">CheckBox1</Property>
    <Property name="Text">Yes</Property>
  </Object> 
  <Object type="System.Windows.Forms.CheckBox">
    <Property name="Name">CheckBox2</Property>
    <Property name="Text">No</Property>
  </Object>
  <SampleDataSet>
    <SampleTable>
      <TableName>Sample1</TableName>
      <ProductName>ABC</ProductName>
      <Price>100</Price>
      <Qty>10</Qty>
      <Amount>1000</Amount>
    </SampleTable>
    <SampleTable>
      <TableName>Sample2</TableName>
      <ProductName>DEF</ProductName>
      <Price>200</Price>
      <Qty>20</Qty>
      <Amount>4000</Amount>
    </SampleTable>
    <SampleTable>
      <TableName>Sample3</TableName>
      <ProductName>GHK</ProductName>
      <Price>300</Price>
      <Qty>30</Qty>
      <Amount>9000</Amount>
    </SampleTable>
  </SampleDataSet>
  </Object>

胆小鬼
城市
TXT城市
英格兰
lblNRIC
NRIC
txtNRIC
ABC01234
无线电按钮1
OptionA
复选框1
对
复选框2
不
样本1
基础知识
100
10
1000
样本2
DEF
200
20
4000
样本3
GHK
300
30
9000
我们知道它不应该像窗口部分那样创建web表单,但是,我们确实需要它。 那么,我如何解决我的问题呢?我可以使用xml序列化吗? 请举例说明正确的方法

问候


Han

您可以使用XSLT将此XML转换为XHTML。此外,您可以从MVC ActionResult类继承自己的XMLBasedFormResult,并使用C#(例如,使用LinqToXML)在ExecuteSult方法生成表单HTML。

您可以使用XSLT将此XML转换为XHTML。此外,您还可以从MVC ActionResult类继承您自己的XMLBasedFormResult,并使用C#在ExecuteResult方法生成表单HTML(例如使用LinqToXML)。

好吧,您不认为最终会复制visual studio的功能吗

我建议您使用类似WPF的东西,它可以在浏览器和Windows应用程序中显示。根据我的经验,解析xml和生成UI的想法不是很好。这几乎就像编写jsp/asp引擎一样

我还注意到,您的xml没有格式信息、屏幕位置、颜色、样式、字体等


您打算如何填充文本框、下拉列表、菜单等?

嗯,您不认为最终会复制visual studio的功能吗

我建议您使用类似WPF的东西,它可以在浏览器和Windows应用程序中显示。根据我的经验,解析xml和生成UI的想法不是很好。这几乎就像编写jsp/asp引擎一样

我还注意到,您的xml没有格式信息、屏幕位置、颜色、样式、字体等


您打算如何填充文本框、下拉列表、菜单等?

正如梅斯所说,XSLT是一个很好的解决方案

这是xls样式表:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Template for <Object type="System.Windows.Forms.Form -->
<xsl:template match="*[@type = 'System.Windows.Forms.Form']">
    <!-- Here's the html's form tag -->
    <form>
        <fieldset>
            <xsl:apply-templates />
        </fieldset>
    </form>
</xsl:template>

<!-- Template for <Object type="System.Windows.Forms.Label -->
<xsl:template match="*[@type = 'System.Windows.Forms.Label']">
    <!-- Here's the html's label tag -->
    <label><xsl:value-of select="." /></label>  
</xsl:template>

<!-- Template for <Object type="System.Windows.Forms.TextBox -->
<xsl:template match="*[@type = 'System.Windows.Forms.TextBox']">
    <!-- Create the html's input tag -->
    <xsl:element name="input">
        <!-- And set the attributes -->
        <xsl:attribute name="name">
            <xsl:value-of select="./Property[@name ='Name']" />
        </xsl:attribute>
        <xsl:attribute name="type">text</xsl:attribute>
        <xsl:attribute name="value">
            <xsl:value-of select="./Property[@name ='Text']" />
        </xsl:attribute>
    </xsl:element>
</xsl:template>

<!-- Add here templates for RadioButton, Checkbox ... -->

</xsl:stylesheet>
//load the Xml doc
XPathDocument myXPathDoc = new XPathDocument(sXmlPath) ;

XslTransform myXslTrans = new XslTransform() ;

//load the Xsl 
myXslTrans.Load(sXslPath) ;

//create the output stream
XmlTextWriter myWriter = new XmlTextWriter
                ("result.html", null);

//do the actual transform of Xml
myXslTrans.Transform(myXPathDoc,null, myWriter);        

myWriter.Close() ;

您必须根据您的场景修改该选项。查看MSDN以了解有关XslTransform类等的信息。

正如mace所说,XSLT是一个很好的解决方案

这是xls样式表:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Template for <Object type="System.Windows.Forms.Form -->
<xsl:template match="*[@type = 'System.Windows.Forms.Form']">
    <!-- Here's the html's form tag -->
    <form>
        <fieldset>
            <xsl:apply-templates />
        </fieldset>
    </form>
</xsl:template>

<!-- Template for <Object type="System.Windows.Forms.Label -->
<xsl:template match="*[@type = 'System.Windows.Forms.Label']">
    <!-- Here's the html's label tag -->
    <label><xsl:value-of select="." /></label>  
</xsl:template>

<!-- Template for <Object type="System.Windows.Forms.TextBox -->
<xsl:template match="*[@type = 'System.Windows.Forms.TextBox']">
    <!-- Create the html's input tag -->
    <xsl:element name="input">
        <!-- And set the attributes -->
        <xsl:attribute name="name">
            <xsl:value-of select="./Property[@name ='Name']" />
        </xsl:attribute>
        <xsl:attribute name="type">text</xsl:attribute>
        <xsl:attribute name="value">
            <xsl:value-of select="./Property[@name ='Text']" />
        </xsl:attribute>
    </xsl:element>
</xsl:template>

<!-- Add here templates for RadioButton, Checkbox ... -->

</xsl:stylesheet>
//load the Xml doc
XPathDocument myXPathDoc = new XPathDocument(sXmlPath) ;

XslTransform myXslTrans = new XslTransform() ;

//load the Xsl 
myXslTrans.Load(sXslPath) ;

//create the output stream
XmlTextWriter myWriter = new XmlTextWriter
                ("result.html", null);

//do the actual transform of Xml
myXslTrans.Transform(myXPathDoc,null, myWriter);        

myWriter.Close() ;

您必须根据您的场景修改该选项。查看MSDN以获取有关XslTransform类等的信息。

请给我一些示例。非常感谢你的回答。我想尝试一下。请给我一些示例。非常感谢你的回答。我想尝试一下。说实话,web的整个部分都是在asp.net mvc中开发的。我的就是其中一种形式。因此,我们不能改成wpf。谢谢你的回答。嗯。。您仍然需要一些布局细节,以了解如何在表格、div等中设置标签、文本框的格式。此外,您还需要将windows控件映射到html控件,因此一些高级windows控件可能难以在html页面中建模。使用元模型更有意义,这不是特定于windows平台的。它应该更像html。事实上,我认为从html页面创建windows窗体UI可能比从基于windows窗体控件的元模型创建web更容易但是,我也对这种情况感到困惑。我认为如果我只显示数据就可以了,不需要创建一些控件,例如下拉列表、菜单和按钮,因为web部件只是用于查看的。我不知道如何解决:(regardsIt仅用于查看,因此不会有太大问题..这也意味着您可以将所有可编辑的内容(如文本框)转换为标签…禁用所有复选框和单选按钮(或显示带有“是/否”的文本框)…你可以使用xslt,但我发现这很难学..在你的情况下,这可能有点过分..你可以解析xml文件.然后在一个div中逐个显示每个元素..你对生成这些文件的过程有控制权吗..然后可能你可以在那里放一些逻辑来简化你的工作..说实话,整个过程都很简单web的一部分是在asp.net中开发的。mvc.mine就是其中的一种形式。因此,我们无法更改为wpf。谢谢您的回答。嗯。您仍然需要一些布局详细信息,说明您希望这些标签、文本框的格式、表格中的格式、div中的格式等。此外,您还需要将windows控件映射到html控件,因此,一些高级windows控件在html页面中建模可能会很困难。拥有一个元模型会更有意义,它不是特定于windows平台的。它应该更像html。事实上,我认为从html页面创建windows窗体UI可能比从基于windows窗体控件的元模型创建web更容易他的情况。我认为如果我只显示数据就可以了,不需要创建一些控件,如下拉列表、菜单和按钮,因为web部件只是用于查看。我不知道如何解决:(regardsIt仅用于查看,因此不会有太大问题..这也意味着您可以将所有可编辑的内容(如文本框)转换为标签..禁用所有复选框和单选按钮(或显示带有“是/否”的文本框)