
发表日期: 2021-05-10 13:09:29 浏览次数:117
范县微信公众号开发【范县网络推广】范县建站、范县网站维护、范县网页制作、范县微信小程序代运营公司

范县,隶属河南省濮阳市,位于中国河南省东北部,濮阳市东部,黄河下游北岸。与濮阳市的濮阳县、台前县以及山东聊城市的莘县、阳谷县接壤,与山东省菏泽市的鄄城县、郓城县隔黄河相望,属暖温带季风气候,四季分明,温度适宜。 辖8镇4乡和1个范水办事处(筹),面积617平方公里,耕地54万亩,574个行政村,56万人 [1] 。
范县历史悠久,西汉初(公元前206年)始置县,以南临范水而得名,迄今已有2200余年历史,是范、顾、姚等姓氏的起源地,“扬州八怪”之一的郑板桥,曾在此任县令五载,境内现存有丹朱文化遗址、闵子墓、苏佑墓、范武子墓等文化古迹。
2006年6月,位于河南省濮阳市颜村铺乡境内的革命旧址,被国务院命名为“国家级文物保护单位”。 [2] 2017年,范县被列入国家园林县城。 [3]
2019年,一般公共预算收入完成8.17亿元,同比增长10.6%;全县生产总值完成213.64亿元,增长7%;规模以上工业增加值增长9.6%;社会消费品零售总额完成86亿元,增长9.8%;居民人均可支配收入完成14966元,增长9.3%;工业用电量完成10.86亿千瓦时,同比增长8.12%。 [1]
2020年2月26日,河南省人民政府批准范县退出贫困县,正式脱贫摘帽。 [4] 2020年7月29日,入选2019年重新确认国家卫生乡镇(县城)名单。 [5]
ASP.NET MVC模式通过重新引进已经丢失的,或者至少已经没有使用很多年的模式,使其本身趋向更简单和“真实”的 HTTP体验(原文:The ASP.NET MVC pattern tends to lead itself into a more simplified and "true" HTTP experience by re-introducing patterns that have been lost, or at least, not followed in many years)。其中的一种模式是Post,Redirect,Get(PRG)模式,它可以"避免二次提交和允许web应用程序使用浏览器书签和reload按钮来更直观的表现"(Wikipedia).
一个普通的ASP.NET Web Form生命周期具有下述的模式:
1. HTTP GET of "Create.aspx"
2. HTTP POST of "Create.aspx"
3. Validation Fails, "Create.aspx" is Re-Rendered
4. HTTP POST of "Create.aspx"
5. Item is created, "Create.aspx" is Re-Rendered with confirmation message
这种Postback模式的主要问题是,在第3步或者第5步点击浏览器的刷新按钮的时候,将会重新Post你已经提交的数据。第5步还存在的一个问题是它甚至可能会重新提交已经创建了的数据(译注:即二次提交,创建了两条相同的数据)。当然,你可以在以上的步骤中处理这些问题,但默认情况下ASP.NET Web Form是这样对待它的。
将这同样的情况放到ASP.NET MVC中,可以通过呈现一个来自你的POST action的"Create"视图来实现同样的方式。例如:
1. HTTP GET of "/products/create", "Create" view is rendered
2. HTTP POST to "/products/submit"
3. Validation Fails, "Create" view is rendered
4. HTTP POST to "/products/submit"
5. Item is created, "Confirm" view is rendered
就和你注意到的一样,ASP.NET Web Form存在的问题,在ASP.NET MVC中也存在同样的问题。真正漂亮的选择是,ASP.NET MVC给予我们更多的"自由"来处理这个流程。如果我们在ASP.NET MVC中严格的按照PRG模式,它看起来应该像:
1. HTTP GET of "/products/create", "Create" view is rendered
2. HTTP POST to "/products/submit"
3. Validation Fails, redirect to "/products/create", "Create" view is rendered
4. HTTP POST to "/products/submit"
5. Item is created, redirect to "/products/confirm", "Confirm" view is rendered
如你所见,我们之前会出现问题的第3步和第5步,不会再存在问题。如果一个用户以上的任何一个步骤按下刷新按钮,他们不会看到如下图所示的可爱的“Would you like to resubmit the form data”的确认信息,而页面只是重新加载了。
要实现这个,你需要1个Controller,3个Action方法,和2个views。跟随下面的步骤实现这个模式:
using System.Web.Mvc;public class ProductsController : Controller
{ public ActionResult Create() { ... } public ActionResult Submit() { ... } public ActionResult Confirm() { ... }
}
当你实现你的 Create action,你要记住的是验证可能是失败的而你可能要重新显示这个表单。TempData是最适合在这种情况下使用的,它如下实现:
public ActionResult Create()
{ if (TempData["ErrorMessage"] != null)
{
ViewData["ErrorMessage"] = TempData["ErrorMessage"];
ViewData["Name"] = TempData["Name"];
ViewData["Price"] = TempData["Price"];
ViewData["Quantity"] = TempData["Quantity"];
}
return RenderView();
}
接下来你要实现你的 Submit action。这里将会处理用户输入数据的验证,如果验证通过则保存数据并重定向到 Confirm action。如果验证失败将会把表单数据保存到TempData中并重定向到 Create action。我们模拟的这个方式在验证失败的情况下也会维持视图数据。
public ActionResult Submit()
{
string error = null; string name = Request.Form["Name"]; if (string.IsNullOrEmpty(name))
{
error = "Name is empty. ";
}
decimal price; if (!decimal.TryParse(Request.Form["Price"], out price))
{
error += "Price is invalid. ";
}
int quantity;
if (!int.TryParse(Request.Form["Quantity"], out quantity))
{
error += "Quantity is invalid.";
}
if (!string.IsNullOrEmpty(error))
{
TempData["ErrorMessage"] = error;
TempData["Name"] = Request.Form["Name"];
TempData["Price"] = Request.Form["Price"];
TempData["Quantity"] = Request.Form["Quantity"];
return RedirectToAction("Create");
}
else
{
return RedirectToAction("Confirm");
}
}
这里注意上面的示例中一些很重要的东西是,尽管我把form中所有的数据放入到本地变量中,可能Price或者Quantity其中任何一个转换失败,而我将TempData用上面的本地变量(译注:指上面的红色部分)赋值...我将丢失用户输入的数据。所以,从Form中取得数据并直接存入到TempData中始终是一个聪明的主意。最后,需要实现 Confrim action :
public ActionResult Confirm()
{
return RenderView(); //译注:参数为空时将呈现和action同名的view}现在,是时候来创建我们的视图了:
~/Views/Products/Create.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Create.aspx.cs" Inherits="Views_Products_Create" %><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Create Product</title>
</head>
<body>
<% using (Html.Form<ProductsController>(c => c.Submit())) { %>
<% if (!string.IsNullOrEmpty((string) ViewData["ErrorMessage"])) { %>
<div style="color:Red;">
<%= ViewData["ErrorMessage"] %>
</div>
<% } %>
Name: <%= Html.TextBox("Name", ViewData["Name"]) %><br />
Price: <%= Html.TextBox("Price", ViewData["Price"]) %><br />
Quantity: <%= Html.TextBox("Quantity", ViewData["Quantity"]) %><br />
<%= Html.SubmitButton("submitButton", "Save") %>
<% } %>
</body></html>
~/Views/Products/Confirm.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Confirm.aspx.cs" Inherits="Views_Products_Confirm" %><html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Confirm Create Product</title> </head> <body> Thanks for creating your product. <%= Html.ActionLink<ProductsController>(c => c.Create(), "Click here") %> to create a new one. </body></html>
就是这样。你可以从这里获取这个模式的示例程序的代码。
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878