• Visual Studio 2010的网站局域网发布功能(Publish)


    Visual Studio 2010的网站局域网发布功能(Publish)

      以前部署asp.net网站时都是复制、粘贴,最近做了bat一键安装mysql和tomcat的setup。

    就想vs有没有更酷更方便的功能呢?果然有,上午研究了下vs的远程发布asp.net网站的功能。

    1,准备

    •     一台开发机,安装了vs2010(vs2012也行)
    •     一台局域网中的服务器(虚拟机也行),必须已经安装iis7(iis 7.5,8也行)
    •     检查服务器8172端口是否能否访问(做测试就先把服务器防火墙关掉也可以,但是最好自己配置防火墙的例外)
    •     我用的是英文版,麻烦童鞋们自己对照下中文版

    2,在局域网中的服务器上安装Webdeploy

       下载地址为:https://www.microsoft.com/web/handlers/webpi.ashx/getinstaller/WDeploy.appids

        

    2,安装完成后,启动MsDepSvc和WMSVC两个服务

    3,在局域网中的服务器iis上建立有效的网站test,参数童鞋们自己设置正确

    4,在开发机器上,打开vs2010,右键选中web项目,选择Publish

    • Publish Profile 就是你远程发布的配置名,我的名字为(vm)192.168.40.128
    • Publish Method,还有其他几个选项,我这里选择的是Web Deploy(其他几个选项也蛮酷,它们有另外的应用场景)
    • Service URL 就是你服务器的有效ip地址
    • Sit/appliaction就是在第3步中建立的web站点名
    • Credentials 一定要选择Allow untrusted cretiicate,然后输入服务器有效用户名和密码
    • 点击Publish.

    5,另外,你可以在右键菜单的Package/Publish Setting中设置发布内容等。

    6,在局域网服务器iis中查看网站是否发布成功。

           ok,如果你还不行,可以发下错误信息,大家都帮你看下。

     
     
    分类: .net技术

    DataGrid绑定Dictionary问题

    【问题】

          在最近的项目中使用DataGrid的DataGridCheckBoxColumn绑定了后台TagModel类的IsSelected字段,数据源是TagModel类型的Dictionary,运行发现Checkbox不能正常勾选,提示错误:此视图不允许“EditItem”。

    【问题重现】

    前台:

    <DataGridCheckBoxColumn Binding="{Binding IsSelected}" />

    后台:

    Dictionary<string, TagModel> dicTag = new Dictionary<string, TagModel>();
    TagModel tm = new TagModel ();
    dicTag.Add("Test",tm);
    dgTest.ItemsSource = dicTag.Values;

    TagModel.cs:

    复制代码
    private bool isSelected = false; 
    public bool IsSelected
    {
                get
                {
                    return isSelected;
                }
    
                set
                {
                    isSelected = value;
                }
     }
    复制代码

    运行后点击CheckBox就会弹出错误:此视图不允许“EditItem”。

    【问题分析】

    1.修改前台代码为:

    复制代码
    <DataGridTemplateColumn>                                
    <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding IsSelected}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    复制代码

    测试无问题。

    2.不修改前台代码,修改后台代码为

    Dictionary<string, TagModel> dicTag = new Dictionary<string, TagModel>();
    TagModel tm = new TagModel ();
    dicTag.Add("Test",tm);
    List<TagModel> lstTM = new List<TagModel>(dicTag.Values);
    dgTest.ItemsSource = lstTM ;

    测试也无问题。

    分析:1.使用Dictionary的Values作为数据源时,DataGridTemplateColumn可以正常操作而DataGridCheckBoxColumn会报错,猜测这两种Column采用了不同的处理机制。

            2.使用List复制Dictionary的Values作为数据源时,DataGridTemplateColumn和DataGridCheckBoxColumn都能正常操作,由于Dictionary的Values没有继承IList接口而List继承了该接口,猜测在使用没有继承IList的变量作为数据源时DataGridCheckBoxColumn和DataGridTemplateColumn的处理机制不同。

    【问题解决】

         通过MSDN版主Lisa Zhu的解释,最终弄明白问题所在http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/cd25f422-dabc-4d1c-a401-16f9b41c1dfd

    • CellTemplateCellEditingTemplate 两种情况,即:单元格不可编辑模式和单元格可编辑模式。
    • DataGridCheckBoxColumnCellEditingTemplate继承而来。
    • cell进行编辑时,DataGridItemSource 需要一个继承了IList<T>接口的集合,Dictionary.Values 没有继承该接口,所以会报错。
    • 这也就是为什么使用DataGridCheckBoxColumn会报错而使用CellTemplate不会报错的原因。
    • 当使用List作为数据源,由于List已经继承IList接口,所以DataGridCheckBoxColumnCellEditingTemplate都能够正常使用。

    【总结】

           使用Dictionary的Values作为数据源时需要将Dictionary的Values先复制到List中,再将List作为数据源绑定。

    【P.S】

           如果使用Dictionary的Values作为数据源并使用CellEditingTemplate 绑定,可以将该列的IsReadOnly设为True,则始终不会使用CellEditingTemplate属性值,就不会抛出错误。但同时也不能操作这一列了。

     
     
    分类: WPF

    response各个方法总结

    今天用到了response各个方法,在此总结一下:

    在讲response以前首先说一下asp.net的输出流程:我们每一请求的输出并不是马上直接发送个客户端,而且先保存在内存中缓冲区中,这个缓冲区的.net实现就是System.IO.TextWriter类型的Response.Output,在我们页面的整个执行过程中就是不断向其中添加内容,当然也可以修改其中的内容,当我们整个页面执行完成后再将缓冲区的内容发给客户端。

    第一个方法response.write():这个方法大家都非常熟悉了,就是“向客户端输出指定的内容”,其实根据上面讲到的"输出流程"我刚才说的“向客户端输出指定的内容”这句话是不准确的。准确的应该是向内容的缓冲区添加内容。就是因为这样我们才可以在以后的处理中随时操作刚才write的内容。(在webfrom中如果我们在page_load方法中使用response.write(),write的内容会出现在输出html的最前面,出现这个情况的原因是在我们调用response.write()时整个页面的内容输出还没有添加到缓冲区中,所以在缓冲区中刚才response.write()的内容出现在页面的内容前面)。

    第二个方法是Response.Clear():这个方法只是清空缓冲区的内容,我们以后还可以继续向缓存区中添加内容。

    第三个方法是Response.End():这个方法终结页面的执行,也就是Response.End()方法后面的代码不会在执行,并且引发EndRequest事件,最后将缓冲区中的内容输出。

    第四个方法是Response.Flush():这个方法是马上将缓冲区的内容输出到客户端,但是程序仍然可以执行后面的代码并向缓冲区中继续添加内容,最终缓冲区的内容的多次添加并多次向客户端输出。(我对这个方法的可能理解不正确,如果大牛们知道确切的解释请帮忙解释下)

     
     
    分类: ASP.NET
  • 相关阅读:
    linux最常用命令记录(一)
    2020centos解决“nginx 403 Forbidden"错误的故事
    nginx显示静态html爆502 bad gateway的错误提示
    codeigniter框架的使用感受和注意事项
    网闸
    抗DDOS防火墙
    负载均衡
    上网行为管理
    漏洞扫描系统
    网络分析系统
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3095938.html
Copyright © 2020-2023  润新知