700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件

ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件

时间:2022-09-07 13:02:25

相关推荐

ASP.NET自定义控件组件开发  第二章 继承WebControl的自定义控件

第二章 继承于WebControl的自定义控件

到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支持!不知道大家对我讲的方式有什么好的建议,我尽量使自定义控件的技术让更多的程序员同胞接受。好了,开发开始了!

系列文章链接:

自定义控件组件开发 第一章 待续

自定义控件组件开发 第一章 第二篇 接着待续

自定义控件组件开发 第一章 第三篇

自定义控件组件开发 第二章 继承WebControl的自定义控件

自定义控件组件开发 第三章 为控件添加事件 前篇

自定义控件组件开发 第三章 为控件添加事件 后篇

自定义控件组件开发 第四章 组合控件开发CompositeControl

自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡

自定义控件组件开发 第五章 模板控件开发

2.0自定义控件组件开发 第六章 深入讲解控件的属性

2.0组件控件开发视频 初体验

本章还是延续上章的例子,开发一个CreditCardForm控件。

其实本章也不难,相信大家看完后,也觉得很简单!

我们首先开谈谈继承Control和WebControl的区别:其实二者最大的区别就是在,如果我们开发的控件继承WebControl,那么我们的控件就支持更多的CSS样式。而继承于Control的自定义控件的样式相对就少些。

其实还有一个区别就在开发的规范上。我们来简单的看看上一章的自定义控件的代码,主要来看看Render方法中的代码:大家只扫一眼就可以了。

Code

1protectedoverridevoidRender(HtmlTextWriterwriter)

2{

3//显示table标记

4writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"287px");

5writer.AddStyleAttribute(HtmlTextWriterStyle.Height,"128px");

6writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth,"0");

7writer.AddAttribute(HtmlTextWriterAttribute.Id,"mytable");

8writer.RenderBeginTag(HtmlTextWriterTag.Table);

9

10//显示table类的标记包含tr,td还有一些textbox,下拉框等

11writer.RenderBeginTag(HtmlTextWriterTag.Tr);

12

13writer.RenderBeginTag(HtmlTextWriterTag.Td);

14writer.Write(PaymentMethodText);

15writer.RenderEndTag();

16

17writer.RenderBeginTag(HtmlTextWriterTag.Td);

18writer.AddAttribute(HtmlTextWriterAttribute.Name,"PaymentMethod");

19writer.AddAttribute(HtmlTextWriterAttribute.Id,"PaymentMethod");

20writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");

21writer.RenderBeginTag(HtmlTextWriterTag.Select);

22

23writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");

24writer.RenderBeginTag(HtmlTextWriterTag.Option);

25writer.Write("Master");

26writer.RenderEndTag();

27

28writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");

29writer.RenderBeginTag(HtmlTextWriterTag.Option);

30writer.Write("Visa");

31writer.RenderEndTag();

32

33writer.RenderEndTag();

34writer.RenderEndTag();

35writer.RenderEndTag();

36

37writer.RenderBeginTag(HtmlTextWriterTag.Tr);

38writer.RenderBeginTag(HtmlTextWriterTag.Td);

39writer.Write(CreditCardNoText);

40writer.RenderEndTag();

41

42writer.RenderBeginTag(HtmlTextWriterTag.Td);

43writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

44writer.AddAttribute(HtmlTextWriterAttribute.Name,"CreditCardNo");

45writer.AddAttribute(HtmlTextWriterAttribute.Id,"CreditCardNo");

46writer.RenderBeginTag(HtmlTextWriterTag.Input);

47writer.RenderEndTag();

48writer.RenderEndTag();

49writer.RenderEndTag();

50

51writer.RenderBeginTag(HtmlTextWriterTag.Tr);

52writer.RenderBeginTag(HtmlTextWriterTag.Td);

53writer.Write(CardholderNameText);

54writer.RenderEndTag();

55

56writer.RenderBeginTag(HtmlTextWriterTag.Td);

57writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

58writer.AddAttribute(HtmlTextWriterAttribute.Name,"CardholderName");

59writer.AddAttribute(HtmlTextWriterAttribute.Id,"CardholderName");

60writer.RenderBeginTag(HtmlTextWriterTag.Input);

61writer.RenderEndTag();

62writer.RenderEndTag();

63writer.RenderEndTag();

64

65writer.RenderBeginTag(HtmlTextWriterTag.Tr);

66writer.RenderBeginTag(HtmlTextWriterTag.Td);

67writer.Write(ExpirationDateText);

68writer.RenderEndTag();

69

70writer.RenderBeginTag(HtmlTextWriterTag.Td);

71writer.AddAttribute(HtmlTextWriterAttribute.Name,"Month");

72writer.AddAttribute(HtmlTextWriterAttribute.Id,"Month");

73writer.RenderBeginTag(HtmlTextWriterTag.Select);

74for(intmonth=1;month<13;month++)

75{

76writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());

77writer.RenderBeginTag(HtmlTextWriterTag.Option);

78writer.Write(month.ToString());

79writer.RenderEndTag();

80}

81

82writer.RenderEndTag();

83

84writer.Write("&nbsp");

85

86writer.AddAttribute(HtmlTextWriterAttribute.Name,"Year");

87writer.AddAttribute(HtmlTextWriterAttribute.Id,"Year");

88writer.RenderBeginTag(HtmlTextWriterTag.Select);

89

90for(intyear=;year<;year++)

91{

92writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());

93writer.RenderBeginTag(HtmlTextWriterTag.Option);

94writer.Write(year.ToString());

95writer.RenderEndTag();

96}

97

98writer.RenderEndTag();

99

100writer.RenderEndTag();

101writer.RenderEndTag();

102

103

104writer.RenderBeginTag(HtmlTextWriterTag.Tr);

105writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");

106writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");

107writer.RenderBeginTag(HtmlTextWriterTag.Td);

108writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");

109writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);

110writer.RenderBeginTag(HtmlTextWriterTag.Input);

111writer.RenderEndTag();

112writer.RenderEndTag();

113writer.RenderEndTag();

114

115//table的结束标记

116writer.RenderEndTag();

117

118

119

120

121}

相信这段代码大家都和熟悉。在这段代码的作用主要显示了一个table 以及table 之中的标记元素。

如果一这个控件已经写好了,加入我们想要改改table的样式,如把border设为1,或者改变显示的颜色等,那么我们就

要再次打开这段代码,修改代码。其实这就不好。为什么?

其实这个方法中的代码做了四件事:

1.显示控件最外层的包含标记,即table

2.显示最外层标记的一些属性,如border.id等

3.显示控件的主要内容 ,如,显示输入框,下拉框,按钮。

4.显示控件最外层包含标记的结束标记。

这样看来,这个方法的职责就有四个。大家应该还记得面向对象设计的原创:单一职责。虽然这个元素一般用在类上,

但是我们更加要注意,这个原则用的宗旨:使对象只有一个变化的因素。这个原则也用在方法的设计上。

就是说,我们如果想要改变最外层标记table一些属性,我们就影响了其他三个职责。同理,我们想改变其他的元素或者

内容,结果可想而知。

为此,继承WebControl的控件就更加的规范和灵活:

其实,继承于WebControl的控件的显示还是在Render方法中显示,只是这个Render方法已经不由我们来写了:

如下:

Code

1

2protectedoverridevoidRender(HtmlTextWriterwriter)

3{

4RenderBeginTag(writer);

5RenderContens(writer);

6RenderEndTag(writer);

7

8}

因为我们之前说,Render方法的职责有四个。所以WebControl的Render方法就把这些职责分离了。以后我们能就

可以独立的改变一个因素了。大家也许奇怪:不是说有四个职责吗,但是上面只是显示了三个方法,其实在

RenderBeginTag()方法中包含显示最外层标记样式的方法。

所以我们只要分别重写这三个方法,一个继承WebControl的自定义的控件就成了。不要怕,方法很多,但是很简单,而

且代码我们都懂,之前差不多都讲了的。

我想把写成后的控件给大家看看,让大家看下我们本章的目标:

大家看见没有:是不是支持的样式多了!!!

好了,我们来写吧:不难哦:)

首先看看我们要的写方法以及他们的功能:

Code

protectedoverridevoidRender(HtmlTextWriterwriter)

{

//显示最外层包含标记开始的标记,即,显示<table..>

RenderBeginTag(writer);

//显示table标记内的内容,如<tr><td><input/>等

RenderContens(writer);

//显示最外层包含标记结束标记</table

RenderEndTag(writer);

}

现在的思路很清晰吧,首先来显示<table....>

很简单,只要如下就可以了。

Code

1protectedoverrideHtmlTextWriterTagTagKey

2{

3get

4{

5returnHtmlTextWriterTag.Table;

6}

7}

不要奇怪,因为RenderBeginTag()方法内部实际是调用了这个属性来显示的最外层的包含标记的。

好了,第一步就写完了啊!简答吧!

下面来显示table的样式,因为我们的控件的最外层的标记是table,显示他的样式只要这样就OK了。

Code

1protectedoverrideStyleCreateControlStyle()

2{

3returnnewTableStyle(ViewState);

4}

又写完了一部分。。不难吧!接着看啊!

如果你的最外层的标记是<div >那么,上面的那个方法你都不用写.

下面就写了RenderContent方法,不难,只记住这个方法的职责:显示最外层标记的内容:

如下:

Code

1protectedoverridevoidRenderContents(HtmlTextWriterwriter)

2{

3writer.RenderBeginTag(HtmlTextWriterTag.Tr);

4writer.RenderBeginTag(HtmlTextWriterTag.Td);

5writer.Write(PaymentMethod);

6writer.RenderEndTag();

7

8writer.RenderBeginTag(HtmlTextWriterTag.Td);

9

10writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);

11writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);

12writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");

13writer.RenderBeginTag(HtmlTextWriterTag.Select);

14

15writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");

16writer.RenderBeginTag(HtmlTextWriterTag.Option);

17writer.Write("Master");

18writer.RenderEndTag();

19

20writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");

21writer.RenderBeginTag(HtmlTextWriterTag.Option);

22writer.Write("Visa");

23writer.RenderEndTag();

24

25writer.RenderEndTag();

26

27writer.RenderEndTag();

28writer.RenderEndTag();

29//****************************************************************************

30writer.RenderBeginTag(HtmlTextWriterTag.Tr);

31writer.RenderBeginTag(HtmlTextWriterTag.Td);

32writer.Write(CreditCardNo);

33writer.RenderEndTag();

34

35writer.RenderBeginTag(HtmlTextWriterTag.Td);

36writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);

37writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);

38writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

39writer.RenderBeginTag(HtmlTextWriterTag.Input);

40writer.RenderEndTag();

41

42writer.RenderEndTag();

43writer.RenderEndTag();

44//**************************************************************************************

45

46writer.RenderBeginTag(HtmlTextWriterTag.Tr);

47writer.RenderBeginTag(HtmlTextWriterTag.Td);

48writer.Write(CardholderName);

49writer.RenderEndTag();

50

51writer.RenderBeginTag(HtmlTextWriterTag.Td);

52writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);

53writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);

54writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

55writer.RenderBeginTag(HtmlTextWriterTag.Input);

56writer.RenderEndTag();

57

58writer.RenderEndTag();

59writer.RenderEndTag();

60//***************************************************************************************

61

62writer.RenderBeginTag(HtmlTextWriterTag.Tr);

63writer.RenderBeginTag(HtmlTextWriterTag.Td);

64writer.Write(ExpirationDate);

65writer.RenderEndTag();

66

67writer.RenderBeginTag(HtmlTextWriterTag.Td);

68writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);

69writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);

70writer.RenderBeginTag(HtmlTextWriterTag.Select);

71

72for(intmonth=1;month<13;month++)

73{

74writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());

75writer.RenderBeginTag(HtmlTextWriterTag.Option);

76writer.Write(month.ToString());

77writer.RenderEndTag();

78}

79writer.RenderEndTag();

80

81/

82

83writer.Write("&nbsp;");

84

85/

86writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);

87writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);

88writer.RenderBeginTag(HtmlTextWriterTag.Select);

89

90for(intyear=;year<;year++)

91{

92writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());

93writer.RenderBeginTag(HtmlTextWriterTag.Option);

94writer.Write(year.ToString());

95writer.RenderEndTag();

96}

97writer.RenderEndTag();

98

99writer.RenderEndTag();

100writer.RenderEndTag();

101//*****************************************************************************

102

103writer.RenderBeginTag(HtmlTextWriterTag.Tr);

104writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");

105writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");

106writer.RenderBeginTag(HtmlTextWriterTag.Td);

107writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);

108writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);

109writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);

110writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");

111writer.RenderBeginTag(HtmlTextWriterTag.Input);

112writer.RenderEndTag();

113

114writer.RenderEndTag();

115writer.RenderEndTag();

116

117//******************************************************************************

118

119

120}

这样就完了,大家看看上面的代码,很熟悉吧,是啊,只是把我们之前的代码分割开了,写在不同的地方!

最后的那个RendEndTag(),你不写!因为,你override那个TagKey时,就已经调用了结束标记的方法。这样,一个继承WebControl的控件就完了!

好了,写完了:完整的代码如下:

Code

1usingSystem;

2usingSystem.Collections.Generic;

3usingSystem.Text;

4usingSystem.Web;

5usingSystem.Web.UI;

6usingSystem.Web.UI.WebControls;

7

8namespaceCreditCardForm

9{

10publicclassCreditCardForm5:WebControl

11{

12#region重写包含标记

13

14protectedoverrideStyleCreateControlStyle()

15{

16returnnewTableStyle(ViewState);

17}

18

19protectedoverrideHtmlTextWriterTagTagKey

20{

21get

22{

23returnHtmlTextWriterTag.Table;

24}

25}

26

27//publicvirtualstringBackImageUrl

28//{

29//get

30//{

31//return((TableStyle)ControlStyle).BackImageUrl;

32//}

33//set

34//{

35//((TableStyle)ControlStyle).BackImageUrl=value;

36//}

37//}

38

39

40#endregion

41#regionID

42protectedvirtualstringPaymentMethodListId

43{

44get

45{

46return"PaymentMethod";

47}

48}

49

50protectedvirtualstringCreditCardNoTextId

51{

52get

53{

54return"CreditCardNo";

55}

56}

57

58protectedvirtualstringCardholderNameTextId

59{

60get

61{

62return"CardholderName";

63}

64}

65

66protectedvirtualstringMonthListId

67{

68get

69{

70return"Month";

71}

72}

73

74protectedvirtualstringYearListId

75{

76get

77{

78return"Year";

79}

80}

81

82protectedvirtualstringSubmitButtonId

83{

84get

85{

86return"Submit";

87}

88}

89

90#endregion

91#regionname

92protectedvirtualstringPaymentMethodListName

93{

94get

95{

96return"PaymentMethod";

97}

98}

99

100protectedvirtualstringCreditCardNoTextName

101{

102get

103{

104return"CreditCardNo";

105}

106}

107

108protectedvirtualstringCardholderNameTextName

109{

110get

111{

112return"CardholderName";

113}

114}

115

116protectedvirtualstringMonthListName

117{

118get

119{

120return"Month";

121}

122}

123

124protectedvirtualstringYearListName

125{

126get

127{

128return"Year";

129}

130}

131

132protectedvirtualstringSubmitButtonName

133{

134get

135{

136return"Sumit";

137}

138}

139#endregion

140

141#region属性

142publicvirtualstringPaymentMethod

143{

144get

145{

146returnViewState["PaymentMethod"]!=null?(string)ViewState["PaymentMethod"]:"支付方式";

147

148}

149set

150{

151ViewState["PaymentMethod"]=value;

152}

153}

154

155publicvirtualstringCreditCardNo

156{

157get

158{

159returnViewState["CreditCardNo"]!=null?(string)ViewState["CreditCardNo"]:"信用卡号";

160}

161set

162{

163ViewState["CreditCardNo"]=value;

164}

165}

166

167publicvirtualstringCardholderName

168{

169get

170{

171returnViewState["CardholderName"]!=null?(string)ViewState["CardholderName"]:"持卡人";

172}

173set

174{

175ViewState["CreditCardName"]=value;

176}

177}

178

179publicvirtualstringExpirationDate

180{

181get

182{

183returnViewState["ExpirationDate"]!=null?(string)ViewState["ExpirationDate"]:"过期时间";

184}

185set

186{

187ViewState["ExpirationDate"]=value;

188}

189}

190

191publicvirtualstringSubmitButtonText

192{

193get

194{

195returnViewState["SubmitButtonText"]!=null?(string)ViewState["SubmitButtonText"]:"提交";

196}

197set

198{

199ViewState["SubmitButtonText"]=value;

200}

201

202}

203#endregion

204protectedoverridevoidRenderContents(HtmlTextWriterwriter)

205{

206writer.RenderBeginTag(HtmlTextWriterTag.Tr);

207writer.RenderBeginTag(HtmlTextWriterTag.Td);

208writer.Write(PaymentMethod);

209writer.RenderEndTag();

210

211writer.RenderBeginTag(HtmlTextWriterTag.Td);

212

213writer.AddAttribute(HtmlTextWriterAttribute.Id,PaymentMethodListId);

214writer.AddAttribute(HtmlTextWriterAttribute.Name,PaymentMethodListName);

215writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"100%");

216writer.RenderBeginTag(HtmlTextWriterTag.Select);

217

218writer.AddAttribute(HtmlTextWriterAttribute.Value,"0");

219writer.RenderBeginTag(HtmlTextWriterTag.Option);

220writer.Write("Master");

221writer.RenderEndTag();

222

223writer.AddAttribute(HtmlTextWriterAttribute.Value,"1");

224writer.RenderBeginTag(HtmlTextWriterTag.Option);

225writer.Write("Visa");

226writer.RenderEndTag();

227

228writer.RenderEndTag();

229

230writer.RenderEndTag();

231writer.RenderEndTag();

232//****************************************************************************

233writer.RenderBeginTag(HtmlTextWriterTag.Tr);

234writer.RenderBeginTag(HtmlTextWriterTag.Td);

235writer.Write(CreditCardNo);

236writer.RenderEndTag();

237

238writer.RenderBeginTag(HtmlTextWriterTag.Td);

239writer.AddAttribute(HtmlTextWriterAttribute.Id,CreditCardNoTextId);

240writer.AddAttribute(HtmlTextWriterAttribute.Name,CreditCardNoTextName);

241writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

242writer.RenderBeginTag(HtmlTextWriterTag.Input);

243writer.RenderEndTag();

244

245writer.RenderEndTag();

246writer.RenderEndTag();

247//**************************************************************************************

248

249writer.RenderBeginTag(HtmlTextWriterTag.Tr);

250writer.RenderBeginTag(HtmlTextWriterTag.Td);

251writer.Write(CardholderName);

252writer.RenderEndTag();

253

254writer.RenderBeginTag(HtmlTextWriterTag.Td);

255writer.AddAttribute(HtmlTextWriterAttribute.Name,CardholderNameTextName);

256writer.AddAttribute(HtmlTextWriterAttribute.Id,CardholderNameTextId);

257writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");

258writer.RenderBeginTag(HtmlTextWriterTag.Input);

259writer.RenderEndTag();

260

261writer.RenderEndTag();

262writer.RenderEndTag();

263//***************************************************************************************

264

265writer.RenderBeginTag(HtmlTextWriterTag.Tr);

266writer.RenderBeginTag(HtmlTextWriterTag.Td);

267writer.Write(ExpirationDate);

268writer.RenderEndTag();

269

270writer.RenderBeginTag(HtmlTextWriterTag.Td);

271writer.AddAttribute(HtmlTextWriterAttribute.Name,MonthListName);

272writer.AddAttribute(HtmlTextWriterAttribute.Id,MonthListId);

273writer.RenderBeginTag(HtmlTextWriterTag.Select);

274

275for(intmonth=1;month<13;month++)

276{

277writer.AddAttribute(HtmlTextWriterAttribute.Value,month.ToString());

278writer.RenderBeginTag(HtmlTextWriterTag.Option);

279writer.Write(month.ToString());

280writer.RenderEndTag();

281}

282writer.RenderEndTag();

283

284/

285

286writer.Write("&nbsp;");

287

288/

289writer.AddAttribute(HtmlTextWriterAttribute.Name,YearListName);

290writer.AddAttribute(HtmlTextWriterAttribute.Id,YearListId);

291writer.RenderBeginTag(HtmlTextWriterTag.Select);

292

293for(intyear=;year<;year++)

294{

295writer.AddAttribute(HtmlTextWriterAttribute.Value,year.ToString());

296writer.RenderBeginTag(HtmlTextWriterTag.Option);

297writer.Write(year.ToString());

298writer.RenderEndTag();

299}

300writer.RenderEndTag();

301

302writer.RenderEndTag();

303writer.RenderEndTag();

304//*****************************************************************************

305

306writer.RenderBeginTag(HtmlTextWriterTag.Tr);

307writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");

308writer.AddAttribute(HtmlTextWriterAttribute.Align,"center");

309writer.RenderBeginTag(HtmlTextWriterTag.Td);

310writer.AddAttribute(HtmlTextWriterAttribute.Name,SubmitButtonName);

311writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);

312writer.AddAttribute(HtmlTextWriterAttribute.Id,SubmitButtonId);

313writer.AddAttribute(HtmlTextWriterAttribute.Type,"submit");

314writer.RenderBeginTag(HtmlTextWriterTag.Input);

315writer.RenderEndTag();

316

317writer.RenderEndTag();

318writer.RenderEndTag();

319

320//******************************************************************************

321

322

323}

324

325}

326}

327

希望大家继续支持啊!谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。