1、断断续续学了一段时间的MVC,遇到不少麻烦事,今天为了添加富文本编辑器(用的kindeditor)给我折腾坏了,咋说也得记录一下,按照里面的.NET的DEMO以及网上的方法,添加上去很简单,可是等到去调试上传图片时发现不是那么那么回事了,怎么都上传不了,一直显示在上传中,经过不断的排除,发现问题在于那两个ashx文件里using LitJson;这句不对劲,原来手欠把后面的JSON写成了大写,导致就算在项目里已经引用过该DLL,但在VS里还是有小红线下划提示,解决方法就是改成using LitJson,我了个去,就是这样,解决。

2、同样利用KINDEDITOR的图片上传,添加一个上传图片的文本框,这样就省去了自己再做这个功能,而且超级好用,在编辑器的文件夹下有个examples,找到image-dialog.html,看到了吧,一目了然,取出代码整合到刚才的页面吧,代码如下:

KindEditor.ready(function (K) {
        var editor = K.create('#Tag', {
            cssPath: 'http://www.cnblogs.com/kindeditor/plugins/code/prettify.css',
            uploadJson: 'http://www.cnblogs.com/kindeditor/asp.net/upload_json.ashx',
            fileManagerJson: 'http://www.cnblogs.com/kindeditor/asp.net/file_manager_json.ashx',
            allowUpload: true,
            allowFileManager: true,
            afterCreate: function () {
                var self = this;
                K.ctrl(document, 13, function () {
                    self.sync();
                    K('form[name="AddNewsContent"]')[0].submit();
                });
                K.ctrl(self.edit.doc, 13, function () {
                    self.sync();
                    K('form[name="AddNewsContent"]')[0].submit();
                });
            }
        });
        K('#image1').click(function () {
            editor.loadPlugin('image', function () {
                editor.plugin.imageDialog({
                    imageUrl: K('#url1').val(),
                    clickFn: function (url, title, width, height, border, align) {
                        K('#url1').val(url);
                        editor.hideDialog();
                    }
                });
            });
        });
...

  此代码当然咋VIEW页面中,下面对应添加  <p><input type="text" id="url1" value="" /> <input type="button" id="image1" value="选择图片" />(网络图片 + 本地上传)</p>这段即可。

3、上传缩略图如果想在页面中及时预览,可以把上述代码改成这样:

                        
。。。
                 K('#url1').val(url);
                        $("#result").append("<img width='150' height='130' src='" + url + "'>");
                      //  $("#Pic").attr("value", url);
                        editor.hideDialog();
。。。。

4、下面解决在MVC中,由于绑定机制直接取得的编辑器中的HTML代码对.NET来说是危险的故而要对编辑器内容转码的问题。

因为.NET的防跨站攻击机制(具体啥啥就那啥啥去吧),直接保存带有HTML标签的内容,会报错,大意就是检测到有潜在危险的 Request.Form 值,此时考虑入库前转码,由于百思不得要领,故而退而求其次,还是程序直接保存吧,方法如下:(既然是防止跨站攻击的,自然有用,非不得已不能禁啊)

在根目录下的WEB.CONGIF文件里

<pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="MvcPaging" />
      </namespaces>
    </pages>
    <httpRuntime requestValidationMode="2.0"/>加上最后这段

5、********************************分割线*************************************************

 

1、MVC中EF立建立关联,外键,两表建立联系,在数据库设计里右键点击字段名(任意一个字段皆可),选择关系--弹出框 表和列规范 右边有个选择,在这里建立联系。

2、不知道是不是EF的BUG,当字段设置为bit也就是布尔类型时,在VIEW里如果是用了CheckBoxFor(CheckBox),会引发一个错误:CS0266: 无法将类型“bool?”隐式转换为“bool”。存在一个显式转换(是否缺少强制转换?)

解决此问题的方法就是用XML格式打开数据模型xx.edmx,找到<edmx:ConceptualModels>....</edmx:ConceptualModels>中间的你的那张表,然后找到你那个设置了bit类型的字段,加上一个属性:Nullable="false" 举例:<Property Type="Boolean" Name="isTop" Nullable="false" />,如此即可

 

 

posted on 2013-03-24 20:15  宕样  阅读(276)  评论(0编辑  收藏  举报