(VS2008 、webform 、C# ) 如何弹出【确认、取消】对话框 ?求现成代码。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(VS2008 、webform 、C# ) 如何弹出【确认、取消】对话框 ?求现成代码。相关的知识,希望对你有一定的参考价值。

提问的原因:
我在网上找了很久,没有找到合适的答案,要不就是错误的,要不就是看不懂。
回答者基本都是“高级程序员”(只能当程序员,不适合当老师或者项目经理的那种“高级”人员)。
他们是这样回答的(请您不会这样回答我的问题,要是我会,我就不提问了,您的回答要【清晰、详细、基础】,我才能看懂):
private void Button1_Click(object sender, System.EventArgs e)

DialogResult result;
if(TextBox1.Text== " ")

result=MessageBox.Show( "You must enter a name. ", "Name Entry Error ",MessageBoxButtons.YesNo,
MessageBoxIcon.Information,MessageBoxDefaultButton.Button1,MessageBoxOptions.ServiceNotification);
if(result == DialogResult.Yes)

Label1.Text= "You click on the yes button";


这样的回答,有两点错误:
(1)出现了“You must enter a name”这样的【高级英文】,不适合用来回答问题(回答问题,可以用中文的地方请用中文,不要写英文装蒜,让人家看得一清二楚才是优秀的回答)。
(2)代码后面没有任何注释,令提问者【知其言不知其所言】,不适合作为教材。

以下是我的问题:

一、问题详细描述:
点击【添加】按钮,添加前,弹出提示【数据库里已经存在这个编码,你确定添加吗?继续添加请按<确定>,不添加请按<取消>】

二、附加要求:
不要JS(javascript)代码【 if(confirm("确定添加吗")) 】,要 C# 代码。

三、请按照以下格式回答:

你好,现成代码是:

using XXXXXXX; //你需要添加这个引用

//下面是弹出对话框的方法
if(MessageBox.Show( "(弹出框的提示内容)您确定要执行操作吗? ", "弹出框的标题", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)== DialogResult.No) XXXXXXXXX; //这可应该有错,请修改,并加上注释(要详细,让菜鸟级别的人都能看懂)

if(XXXXXXXX) //弹出确认对话框之后,用户点击了【确认】按钮,则执行这一段

XXXXXXXXX; //如果您要写代码,请在每一句代码后面加注释(要让对方看懂,而不是自己看懂别人看不懂)

else //弹出确认对话框之后,用户点击了【取消】按钮,则执行这一段

XXXXXXXXX; //如果您要写代码,请在每一句代码后面加注释(要让对方看懂,而不是自己看懂别人看不懂)

你的需求在客户端脚本完全可以实现,其中需要和数据库交涉的部分可以使用回调,然后调用js提示。

现在web端除了js的那些,基本都是弹出层做的效果,比如ext、jquery等
1.思路:新建一透明层覆盖全部页面;然后弹出提示层;
2.实现:这依然是js写的
var dvMask=document.createElement('div');
dvMask.style.cssText="position:absolute;width:100%;height:100%;filter:alpha(opacity=50);z-index:1000;"
var dvMsgBox=document.createElement('div');
dvMsgBox.style.css='z-index:10001;//在这里再添加一些你弹出框的样式,如果觉得在这里写比较麻烦,也可以把样式单独提出来写到样式表里面去,或者在制定页中将这个div标签构建好';
var oBody=document.documentElement||document.body;
oBody.appendChild(dvMask);
oBody.appendChild(dvMsgBox);

另外你还需要处理点击关闭时,remove掉这些对象,
其实建议你使用jquery提供的,不禁浏览器兼容性比较靠谱,也不叫简单

当然有思路了,想自己写也行,也不难写
至于回调,你可以查一下callback相关知识,或者回头hi 我也可以

另外说一句
在交流平台里面,如果想得到大家的帮助,要抱着谦虚学习的态度,不要埋怨网友回复不详,他们能拿出时间来回复,本身就是应该得到尊重的
没别的意思,你可能比我资深,可能是新人,无论如何,谦虚一点才能更好地交流追问

谢谢前辈指导哈,阿拉受教了,是我错了,不好意思哈,我以后会注意的~

追答

兄弟,给个采纳可否?

参考技术A 不过是20分而己了。哥会,可是哥懒得回答你那么详细。
哥只给你提供思路。
1、使用ajax回传检查是否存在,根据结果提示不同的信息。
2、按照你的笨思路,用asp.net ajax 里面有一个ScriptManager.RegisterClientScriptBlock 可以往客户端动态写脚本。追问

大哥好,追加分数了,现在不止20分了,求指点 —_—

参考技术B 直接向客户端注册脚本
ClientScript.RegisterStartupScript(this.getType(),"confirmDilag","<script>confirm('你确定要执行吗?')........执行代码</script>")
如果你在弹出确认后要执行服务器端代码(也就是C#),那你要掌握客户端回调的知识,或者做一个隐藏的DIV,里面有要执行的服务器控件,用ClientScript.RegisterStartupScript,把它显示出来.
参考技术C DialogResult 引入包 你把鼠标放在上面 就可以自动选择包了!追问

汗,请看题目:webform (不是 winform )

webform 没有 DialogResult ,鼠标放上面,根本没有提示让我添加 using 。

参考技术D 我也在找,看完这个,发现没有满意答案。哥们把分给我吧。本回答被提问者采纳

如何允许 ASP.NET WebForms 端点的 CORS?

【中文标题】如何允许 ASP.NET WebForms 端点的 CORS?【英文标题】:How to allow CORS for ASP.NET WebForms endpoint? 【发布时间】:2016-06-08 05:56:53 【问题描述】:

我正在尝试将一些 [WebMethod] 带注释的端点函数添加到 Webforms 样式的 Web 应用程序(.aspx 和 .asmx)。

我想用 [EnableCors] 注释这些端点,从而获得所有良好的 ajax 预检功能。

VS2013 接受注释,但端点仍然不能很好地与 CORS 配合使用。 (当使用同源但不是跨源时,它们可以正常工作)。

我什至无法让它们与肮脏和肮脏的跨域功能

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");

方法 -- 我的浏览器拒绝响应,并且没有出现跨域响应标头。

如何在这些 [WebMethod] 端点中获得 CORS 功能?

【问题讨论】:

WebForms 主动使修改标题变得困难,例如一旦将某些内容发送给用户,您就无法更改标题。这是我以前使用过的一种技巧:***.com/questions/4091157/… 另一种使用 webconfig 的方法 ***.com/questions/2922178/… 还有一种更现代的方式来使用 owin 中间件操作标头:mikesdotnetting.com/article/269/… 【参考方案1】:

我建议您仔细检查您是否已执行此页面上的所有步骤:CORS on ASP.NET

除了:

Response.AppendHeader("Access-Control-Allow-Origin", "*");

也试试:

Response.AppendHeader("Access-Control-Allow-Methods","*");

尝试直接在网络配置中添加:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" value="*" />
       <add name="Access-Control-Allow-Headers" value="Content-Type" />
     </customHeaders>
   </httpProtocol>
</system.webServer>

否则,您需要确保您对这两个域都有控制权。

【讨论】:

你是已知世界上最伟大的程序员!诗歌将被写下,地位将以你的圣名建立! 这不是正确答案,用户询问了一种在 webmethods 而不是 webapi 上启用 CORS 的方法【参考方案2】:

如果您需要预检请求,例如所以你可以发送经过身份验证的请求,你不能设置Access-Control-Allow-Origin: *。它必须是特定的Origin 域。 如果您使用除默认值之外的任何内容,您还必须设置 Access-Control-Allow-MethodsAccess-Control-Allow-Headers 响应标头。 (请注意,这些约束正是 CORS 本身的工作方式 - 这就是它的定义方式。)

所以,仅仅抛出 [EnableCors] 属性是不够的,你必须为参数设置值:

[EnableCors(origins: "https://www.olliejones.com", headers: "X-Custom-Header", methods: "PUT", SupportsCredentials = true)]

或者,如果您想手动明确地执行操作:

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "https://www.olliejones.com");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", "X-Custom-Header");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "PUT");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true");

最后一件事 - 您必须在启动时致电 .EnableCors()。在例如MVC 或 WebAPI,您可以在 HttpConfiguration 上调用它,在注册配置等时 - 但是我不知道它如何与 WebForms 一起使用。

【讨论】:

【参考方案3】:

仅供参考,在经典网络表单中启用 CORS。在 Global.asax 中

void Application_Start(object sender, EventArgs e)
            
        GlobalConfiguration.Configuration.EnableCors();        
        RouteTable.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/controller/action/id",
     defaults: new  id = System.Web.Http.RouteParameter.Optional 
 );

【讨论】:

【参考方案4】:

如果您使用 AppendHeader 方法发送缓存特定的头部,同时使用缓存对象模型(Cache)设置缓存策略,则在使用缓存对象模型时可能会删除与缓存相关的 HTTP 响应头部.此行为使 ASP.NET 能够维护最严格的设置。例如,考虑一个包含用户控件的页面。如果这些控件具有冲突的缓存策略,则将使用最严格的缓存策略。如果一个用户控件设置了标头“Cache-Control: Public”,而另一个用户控件通过调用 SetCacheability 设置了更严格的标头“Cache-Control: Private”,那么“Cache-Control: Private”标头将与回应。

您可以在 web config 中为 customHeaders 创建一个 httpProtocol。

<httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" values="*" />        
     </customHeaders>
   <httpProtocol>

【讨论】:

【参考方案5】:

对于网页表单,可以使用

Response.AddHeader("Access-Control-Allow-Origin", "*");

而不是

Response.AppendHeader("Access-Control-Allow-Origin", "*");

第一个适用于旧版本的 ASP.Net Web 表单。

【讨论】:

【参考方案6】:

我认为您的代码看起来不错,但 IIS 不会单独发送标头实体和预期的响应。请检查IIS是否配置正确。

配置IIS6 配置IIS7

如果 CORS 不能解决您的特殊性问题,也许 jsonp 是另一种可能的方式。

【讨论】:

也许 json 是另一种可能的方式。怎么样? 我猜你将JSONP 误读为JSON。 JSONP 响应是包装在函数调用中的标准 JSON 字符串。每个现代浏览器都能够评估 JSONP 响应而不受源域策略限制。您可以找到一些 c# 的解决方案,例如 ***.com/questions/14221429/…【参考方案7】:

你可以在 MVC 中这样做

[EnableCors(origins: "*", headers: "*", methods: "*")]
public ActionResult test()

     Response.AppendHeader("Access-Control-Allow-Origin", "*");
     return View();

【讨论】:

OP 在 MVC 中没有这样做,正如他在帖子标题中指定的那样。

以上是关于(VS2008 、webform 、C# ) 如何弹出【确认、取消】对话框 ?求现成代码。的主要内容,如果未能解决你的问题,请参考以下文章

VS2008如何将C#写的Winform程序打包成安装包?

WebForms VS MVC

如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!

如何解决从VS2010到VS2015的reportviewer问题

用vs2010平台,c#写的asp.net网站,动态增加和减少Textbox

如何设置 VS2008 以进行高效的 C++ 开发