Fork me on GitHub
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
posted on 2013-05-23 22:50  HackerVirus  阅读(1320)  评论(0编辑  收藏  举报