成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MVC下讀取XML生成動態表單的例子

開發
本文是在MVC下動態表單怎么生成的這一問題引出的,作者將通過實例講解的方式,講述如何在MVC下讀取XML生成動態表單。

我們來看下面的例子:

接著上次的MVCMembership來講

我們首先添加一個目錄XML。然后添加View:

1.checkXml.aspx 用來檢查我們輸入的XML格式(利用XSD檢查)

2.New.aspx 用來新增XML表單的

3.Show.aspx 用來顯示XML表單的

4.ShowResult.aspx 用來顯示XML表單提交的結果的

一、數據庫結構

要用到動態的表單,這里我們利用Sqlserver2005的XML類型來保存,建表的SQL如下:

use Test
/*==============================================================*/
/* DBMS name:      Microsoft SQL Server 2005                    */
/* Created on:     2009/5/8 7:56:50                             */
/*==============================================================*/
if exists (select 1
from  sysindexes
where  id    = object_id('XMLFORM')
and   name  = 'IDX_XML'
and   indid > 0
and   indid < 255)
drop index XMLFORM.IDX_XML
go
if exists (select 1
from  sysindexes
where  id    = object_id('XMLFORM')
and   name  = 'IDX_ID'
and   indid > 0
and   indid < 255)
drop index XMLFORM.IDX_ID
go
if exists (select 1
from  sysobjects
where  id = object_id('XMLFORM')
and   type = 'U')
drop table XMLFORM
go
/*==============================================================*/
/* Table: XMLFORM                                               */
/*==============================================================*/
create table XMLFORM (
ID                   int                  identity,
FORMXML              xml                  not null,
constraint PK_XMLFORM primary key (ID)
)
go
declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description',
'XMLFORM',
'user', @CurrentUser, 'table', 'XMLFORM'
go
/*==============================================================*/
/* Index: IDX_ID                                                */
/*==============================================================*/
create unique index IDX_ID on XMLFORM (
ID ASC
)
go
/*==============================================================*/
/* Index: IDX_XML                                               */
/*==============================================================*/
create PRIMARY XML INDEX IDX_XML on XMLFORM (
FORMXML
)
go

好了我們建了一個名為XMLForm的表,其中ID自增,FORMXML為我們需要的XML表單的內容

二、編寫XML的Controller

XMLController.cs

主要的action

1.New

[[2719]]498)this.style.width=498;" height=148>

[[2720]]498)this.style.width=498;" height=127>

[[2721]]498)this.style.width=498;" height=127> [[2722]]498)this.style.width=498;" height=127>


[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
public ActionResult New(string xmlContent)
{
System.Threading.Thread.Sleep(2000);    //模擬提交等待
xmlContent = Server.UrlDecode(xmlContent);
if (!string.IsNullOrEmpty(xmlContent))
{
//if (!CheckXML(xmlContent, out strError)) //服務器端檢測,如果用了ajax檢測,就沒必要了
//{
//    ModelState.AddModelError("_FORM",strError); 
//    return View();
//}
XMLFormDataContext db = new XMLFormDataContext();
TransactionOptions opt = new TransactionOptions();
ViewData["xmlContent"] = xmlContent;
opt.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope tran = new TransactionScope(TransactionScopeOption.RequiresNew, opt))
{
XMLFORM f = new XMLFORM();
try
{
f.FORMXML = XElement.Parse(xmlContent);
db.XMLFORMs.InsertOnSubmit(f);
db.SubmitChanges();
var id = db.XMLFORMs.Max(p => p.ID);
ViewData["result"] = "success";
ViewData["id"] = (int)id;
tran.Complete();
return View();
}
catch
{
ViewData["result"] = "failure";
ModelState.AddModelError("_FORM", "envalid xml format");
return View();
}
}
}
else
return View();
}XML:







注意:我們使用了事務,所以不要忘了***要提交。我就是忘了,找了3天錯誤   2.Show

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Show(int? ID)
{
int nId = 0;
XElement doc = null;
if (int.TryParse(Request["id"], out nId))
{
try
{
XMLFormDataContext db = new XMLFormDataContext();
var q = from f in db.XMLFORMs
where f.ID == nId
select f.FORMXML
;
if (q.Count() > 0)
{
foreach (var qq in q)
{
doc = qq;
}
ViewData["xml"] = doc;
}
else
{
ModelState.AddModelError("_FORM", "Not Exists");
}
ViewData["id"] = nId;
}
catch (Exception e)
{
ModelState.AddModelError("_FORM", e.Message);
}
}
else
{
ModelState.AddModelError("_FORM", "Miss ID");
}
return View();
}

注意這里Show.asp的寫法.不能用< input .../ >直接輸出控件字符串,而要

Response.Write(Html.TextBox(i.Attribute("Name").Value, "", new { @class = "InputNormal" }));否則提交后得不到form的值代碼如下:

  <%using (Html.BeginForm())
{ %>
<%=Html.ValidationSummary()%>


Show XML Form




XML Form Information

<%
XElement xml=(XElement)ViewData["xml"];
StringBuilder sbScript = new StringBuilder();
sbScript.AppendLine("");
Response.Write(sbScript);
input = from p in xml.Elements()
where p.Name == "Input" && p.Attribute("Type").Value == "Button"
select p;
foreach (var b in input)
{
Response.Write("");
switch (b.Attribute("Text").Value.ToLower())
{
case "commit":
Response.Write(string.Format("", b.Attribute("Name").Value, b.Attribute("Text").Value));
break;
case "validate":
Response.Write(string.Format("", b.Attribute("Name").Value, b.Attribute("Text").Value));
break;
}
Response.Write("");
}
%>


<%} %>

XML內容的檢測

我們可以利用XSD來檢查。

代碼如下

  #region 檢查xml
[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
public ActionResult checkXML(string xmlContent)
{
string strOut = string.Empty;
int nResult = (CheckXML(xmlContent, out strOut) == true) ? 1 : 0;
Dictionary dicResult = new Dictionary();
dicResult.Add("State", nResult.ToString());
dicResult.Add("Message", strOut);
return Json(dicResult);
}
private bool CheckXML(string xmlContent)
{
bool bResult = true;
if (!string.IsNullOrEmpty(xmlContent))
{
//利用XmlSchemaSet(XSD)檢查XML
XmlSchemaSet validator = new XmlSchemaSet();
validator.Add("", XmlReader.Create(Server.MapPath(Url.Content("~/Models/xmlTest.xsd")))); //Url.Content必須,否則找不到文件
XDocument doc = null;
try
{
doc = XDocument.Parse(xmlContent);
doc.Validate(validator, (sender, e) =>
{
bResult = false;
});
}
catch
{
bResult = false;
}
}
else
bResult = false;
return bResult;
}
private bool CheckXML(string xmlContent, out string outString)
{
bool bResult = true;
string strError = string.Empty;
if (!string.IsNullOrEmpty(xmlContent))
{
//利用XmlSchemaSet(XSD)檢查XML
XmlSchemaSet validator = new XmlSchemaSet();
validator.Add("", XmlReader.Create(Server.MapPath(Url.Content("~/Models/xmlTest.xsd")))); //Url.Content必須,否則找不到文件
XDocument doc = null;
try
{
doc = XDocument.Parse(xmlContent);
doc.Validate(validator, (sender, e) =>
{
strError = e.Message;
bResult = false;
});
}
catch (XmlException e)
{
strError = e.Message;
bResult = false;
}
}
else
bResult = false;
if (!bResult)
outString = strError;
else
outString = "OK";
return bResult;
}
#endregion

這里我們返回json數據,來ajax檢查

        $(document).ready(function() {
$("form").submit(function() {
if (jQuery.formValidator.pageIsValid())
$.blockUI({ message: '

Please Wait...

' });
});
if ($("#xmlContent").val() != "")
$("#xmlContent").val(decodeURI($("#xmlContent").val()));
$.formValidator.initConfig();
$("#xmlContent").formValidator({ onshow: "please input xml", onfocus: "xml required", oncorrect: "OK" })
.inputValidator({ min: 1, empty: { leftempty: true, rightempty: true }, onerror: "xml required" })
.ajaxValidator({
type: "post",
url: "checkXML",
datatype: "json",
success: function(responseData) {
if (responseData.State == "1") {
return true;
}
else {
return false;
}
},
buttons: $("#submit"),
error: function() { alert("server busy,try later..."); },
onerror: "XML Format error or same content",
onwait: "XML checking,please wait..."
});
});
function CheckForm() {
result = jQuery.formValidator.pageIsValid();
if (result) {
$("#xmlContent").val(encodeURI($("#xmlContent").val()));
}
return result;
}

注意我們利用了encodeURI,decodeURI進行編碼,來避免A potentially dangerous Request.QueryString value was detected from the client問題

3.***編寫ShowResult

        [AcceptVerbs(HttpVerbs.Post)]
public ActionResult ShowResult()
{
StringBuilder sbResult = new StringBuilder();
foreach(string key in Request.Form.Keys)
{
sbResult.AppendLine(string.Format("{0}={1}", key, Request.Form[key]));
}
return Json(sbResult.ToString());
}

很簡單的直接輸出form的內容,你也可以進行你自己的處理,用ajax來避免再次刷新***結果

[[2723]]498)this.style.width=498;" height=127> [[2724]]498)this.style.width=498;" height=127>

【編輯推薦】

  1. 淺談如何使用.NET存儲XML數據
  2. Java使用XML作為持久存儲介質實現方法
  3. 詳解Java解析XML的四種方法
責任編輯:彭凡 來源: cnblogs
相關推薦

2010-08-13 08:47:28

xml文件Flex

2009-03-31 13:12:05

ASP.NETMVC表單驗證

2009-09-14 18:44:06

MVC+jQuery

2009-06-24 09:36:52

XML實現breadcMVC

2009-02-04 08:52:55

動態頁面XMLXSL

2012-08-16 15:56:33

XML

2009-06-11 17:39:55

xmljava

2009-08-18 16:42:49

C# 操作XML

2011-07-15 14:29:44

PHPXML

2009-06-19 11:43:59

Spring MVC框

2009-08-26 15:53:42

C#數據訪問XML

2013-07-30 11:30:42

Windows PhoWindows Pho

2009-08-12 16:26:30

C#讀取XML文檔

2011-04-19 10:32:27

MVCjQuery

2010-08-06 09:38:11

Flex讀取XML

2013-06-08 13:29:27

Android開發DOM讀取XMLXML解析

2023-12-20 13:49:00

Linux動態庫代碼

2010-03-12 09:38:58

2009-03-09 09:45:07

MVCAjax.Net

2009-12-31 11:35:20

Silverlight
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本特黄a级高清免费大片 成年人黄色小视频 | 国产成人网 | 精品欧美在线观看 | 成人天堂噜噜噜 | 欧美日韩在线视频一区 | 欧美www在线| 国产在线播放av | www.亚洲一区 | 男人久久天堂 | 日批日韩在线观看 | 国产精品久久久久久影视 | 精品无码三级在线观看视频 | av中文字幕在线观看 | 日韩精品在线观看视频 | av高清毛片 | 日本精品视频 | 欧美日韩在线一区二区三区 | 中文字幕人成乱码在线观看 | 9999久久| 亚洲一区二区三区四区五区午夜 | 超碰97人人人人人蜜桃 | 欧美日韩高清在线一区 | 久久久久久久国产精品视频 | 国产网站久久 | 中文字幕亚洲一区 | www.久久久久久久久久久 | www97影院| 日本视频一区二区三区 | 久久久久久高潮国产精品视 | 国产一区二区三区在线 | 国产高清在线 | 久久久久久国产精品免费免费狐狸 | 日韩一区中文字幕 | h肉视频 | 一级黄片一级毛片 | 中文字幕亚洲一区 | 奇米影视77 | 亚洲一区二区三区免费 | 久久国产一区 | 狠狠干天天干 | 久久精品日产第一区二区三区 |