1、datagrid中JS函数传值问题:

columns:

{
field: 'TypeName', title: '分类名称', width: 120, sortable: true,
formatter: function (value, row, index) {
var contentDetails = "<a href='' style='text-decoration: none;' onclick='showDetailsDialog(" + row.ID + ");return false'>" + value + "</a>";
return contentDetails;
}
},

注意,以上点击事件的传值( row.ID或者value)一般都是一个int类型,如果是所传的值是字符串,则需要注意加转移字符符号。例如传值为分类名称则应该如下代码:

{
field: 'TypeName', title: '分类名称', width: 120, sortable: true,
formatter: function (value, row, index) {
var contentDetails = "<a href='' style='text-decoration: none;' onclick='showDetailsDialog(\"" + value + "\");return false'>" + value + "</a>";
return contentDetails;
}
},

2、MVC @Html.DropDownList显示默认值问题

视图页面代码:

@Html.DropDownList("ClassPre", (SelectList)ViewBag.JY_Atype_ClassPre, "==请选择上一级分类==", new { @style = "width: 60%; height: 32px" })或

@Html.DropDownList("ClassPre", (SelectList)ViewBag.JY_Atype_ClassPre,  new { @style = "width: 60%; height: 32px" })

样式也可以去掉

Controller里面的代码:

ViewBag.JY_Atype_ClassPre = new SelectList(newList, "ID", "TypeName", model.ClassPre);

注意:控件的name和viewbag(或viewdata)不能重名。例如以上情况时:不要用ViewBag.ClassPre或ViewBag.TypeName或ViewBag.ID这样的名称,尽量避免这样的重名。

3、采用一个递归算法格式化展示多级分类名称

效果如下图:

List<JY_Atype> lst = bll.selectAll();
List<JY_Atype> newList = new List<JY_Atype>();
bll.GetMyList(lst, ref newList, 0, 1); //递归格式化分类
ViewBag.JY_Atype_ClassPre = new SelectList(newList, "ID", "TypeName", model.ClassPre);

/// <summary>
/// 递归方法格式化分类
/// </summary>
/// <param name="list">需要格式化的List类型的数据</param>
/// <param name="newList">格式化后返回的List类型的数据</param>
/// <param name="step">步骤,第一次执行时为0</param>
/// <param name="PerID">这个是上一级分类的分类ID(即当前分类的的父级ID)</param>
public void GetMyList(List<JY_Atype> list, ref List<JY_Atype> newList, int step, int PerID)
{
if (list.Count == 0)
{
return;
}

string _Step = "";
for (int i = 0; i < step; i++)
{
_Step += "  ";
}
_Step += "├";
foreach (JY_Atype atype in list)
{
if (atype.ClassPre == PerID)
{
int n = newList.Count;
newList.Add(atype);
newList[n].TypeName = _Step + atype.TypeName;
newList[n].ID = atype.ID;
newList[n].ClassOrder = atype.ClassOrder;
newList[n].ClassPre = atype.ClassPre;
newList[n].IsSystem = atype.IsSystem;
newList[n].Img = atype.Img;
int newstep = step + 1;
GetMyList(list, ref newList, newstep, Convert.ToInt32(atype.ID));
}
}
}

4、MVC中采用百度富文本编辑器在编辑视图页面新闻内容初始化为空问题:

<span style="display: none;">
<input type="hidden" id="Content" class="easyui-textbox" style="width: 100%; height: 32px; display: none;" value="@Model.content">
</span>

<script type="text/javascript">

var URL = "/ueditor/"; //这里你可以配置成ueditor目录在您网站的相对路径或者绝对路径

var editor = new baidu.editor.ui.Editor({ initialFrameHeight: 280, initialFrameWidth: 750 });

editor.render("editor");

editor.ready(function() {
editor.setContent($('#Content').val());
});

</script>

5、MVC数据注释及验证引用

using System.ComponentModel.DataAnnotations;

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ComponentModel.DataAnnotations.dll

6、项目中添加了MVC引用,但是一直编译不成功,总是提示System.Web中不包含Mvc的命名:FlagType.SelectListItems

最后解决:项目.Net FrameWork版本统一。

7、对于ASP.NET设置页面缓存:

如果页面加了:<%@ OutputCache Duration="60" VaryByParam="none" %>,可能造成页面分页不正常,尽量不要采用页面缓存。

8、JQuery EasyUI页面输入框事件JS:

<div class="editor-field">
<input required="true" id="PageCode" name="PageCode" value="@Model.PageCode" class="easyui-textbox" style="width: 60%; height: 32px" />
@Html.ValidationMessageFor(model => model.PageCode)
</div>

JS:

<script type="text/javascript">
$(function () {

$("input", $("#PageCode").next("span")).blur(function() {
//alert($(this).val());
var code = $(this).val();
$.post("@Url.Action("IsHavePageCode", "Sys_RolePermission")", { pagecode: code }, function (data) {

if (data.toString() == "1") {
alert("已有相同的模块编码");
}
});

});

});

</script>

9、 ASP.NET MVC中启用CSS和JS文件捆绑优化:

使用BundleTable捆绑多个css文件和js文件,以提高网络加载速度和页面解析速度。
通过在Global.asax.cs文件中修改BundleTable的EnableOptimizations属性来打开和关闭捆绑优化。

protected void Application_Start()
{
//other code has been removed for clarity
//disable optimization
System.Web.Optimization.BundleTable.EnableOptimizations = false;
} 10、 ASP.NET MVC中有哪几种方式去修改默认的layout (1)、修改根目录下的Views文件夹的 _ViewStart文件。_ViewStart为web application定义了默认layout页面。可以通过代码根据不同的Controller加载不同的layout。
@{
var controller =
HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToSt
ring();
string layout = "";
if (controller == "Admin")
{
layout = "~/Views/Shared/_AdminLayout.cshtml";
}
else
{
layout = "~/Views/Shared/_Layout.cshtml";
}
Layout = layout;
}
(2)、在Views文件夹的某一个View目录下新增 _ViewStart 文件。

(3)、在View页面的顶部修改Layout
@{
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
(4)、在ActionResult中指定Layout
public ActionResult Index()
{
RegisterModel model = new RegisterModel();
//TO DO:
return View("Index", "_AdminLayout", model);
}
11、在ASP.NET MVC 中有三种方式从controller传值到view中(还有一个实体模型传值就不说了):
ViewData, ViewBag 和 TempData。Asp.net WebForm 中可以在一次用户会话中使用Session去持久化数据。

ViewData

    • ViewData 是一个继承自ViewDataDictionary类的字典对象。
      public ViewDataDictionary ViewData { get; set; }
    • ViewData 用来从controller中传值到相对应的view中。
    • 生命周期仅存在于当前此次请求。
    • 如果发生重定向,那么值将会被清空。
    • 从ViewData中取值时需要进行类型转换和Null Check以避免异常。

ViewBag

    • ViewBag ViewBag是一个动态属性,是基于C# 4.0的动态语言的特性。
      public Object ViewBag { get;}
    • 是对ViewData的一次包装,也是用来从controller中传值到相对应的view中。
    • 生命周期仅存在于当前此次请求。
    • 如果发生重定向,那么值将会被清空。
    • 从ViewBag中取值时不需要进行类型转换。

TempData

      • TempData 是一个继承于TempDataDictionary类的字典对象,存储于Session中 。
        public TempDataDictionary TempData { get; set; }
      • TempData 用来进行跨页面请求传值。
      • TempData被请求后生命周期即结束。
      • 从TempData中取值时需要进行类型转换和Null Check以避免异常。
      • 主要用来存储一次性数据信息,比如error messages, validation messages。
        详情可参考:TempData知多少
        Session
      • ASP.NET MVC中Session是Controller中的一个属性,Session是HttpSessionStateBase类型。
        public HttpSessionStateBase Session { get; }
      • Session保存数据直到用户会话结束(默认session过期时间为20mins)。
      • Session对所有的请求都有效,不仅仅是单一的跳转。
      • 从Session中取值时需要进行类型转换和Null Check以避免异常。

12、数据注解(数据注释)

Data Annotation 特性是位于System.ComponentModel.DataAnnotations命名空间下,适用于Asp.net 项目(比如Asp.net web application & website, Asp.net MVC, Web forms ),同时也适用于Entity framework ORM 模型。
Data Annotations帮助我们为model类或属性定义规则进行数据验证和显示合适的提示信息给终端客户。
Data Annotation 验证特性:

    • DataType - 为属性指定数据类型
    • DisplayName - 为属性指定显示名称
    • DisplayFormat - 为属性指定显示格式
    • Required - 限制属性为必录
    • ReqularExpression - 用正则表达式验证属性的值是否满足要求
    • Range - 限制属性的值在某一区间
    • StringLength - 指定string类型属性的最小和最大长度
    • MaxLength - 指定string类型属性的最大长度
    • Bind - 添加参数或表单数据到model属性时,指定字段将会被添加到或排除
    • ScaffoldColumn - 隐藏表单编辑界面的指定字段

ASP.NET MVC中如何注册Area:

在使用Area之前,确保已经在Global.asax的Application_Start方法中注册。

protected void Application_Start()
{
//Register all application Areas
AreaRegistration.RegisterAllAreas();
}

需要记住的是,必须在最开始注册Area,以至于注册的settings, filters 和 routes
能够应用于Area。

14、和 ASP.NET一样, MVC Forms authentication在IIS认证完成之后发生。可以在 ASP.NET MVC应用程序中的Web.config文件的forms节点进行配置。

默认的表单认证配置如下:

<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
timeout="30"
name=".ASPXAUTH"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
</system.web> 15、
ASP.NET MVC如何允许输入html tags:

ASP.NET MVC默认不允许用户去提交html去避免Cross Site Scripting(CSS)攻击 。
ValidateInput特性可以在action级别或controller级别启用或禁用输入校验。

[ValidateInput(false)]
public class HomeController : Controller
{
public ActionResult AddArticle()
{
return View();
}
}

ValidateInput特性对所有属性都允许html tag输入,但这是不安全的。 如果你只是想针对部分属性允许html输入,可以通过为属性添加AllowHtml 特性。

public class BlogModel
{
[Required]
[Display(Name = "Title")]
public string Title { get; set; }
[AllowHtml]
[Required]
[Display(Name = "Description")]
public string Description { get; set; }
}

16、MVC中设置缓存

//Action缓存,10秒
[OutputCache(Duration = 10)]
// GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

public ActionResult Index2()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

使用配置文件进行缓存配置

在MVC的Web.config文件中,可以对缓存进行相关的配置。

在system.web节点中,添加caching子节点,然后如下:

<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="10" />
</outputCacheProfiles>
</outputCacheSettings>

配置好后,我们的Control缓存或者Action缓存就可以这么写:

 [OutputCache(CacheProfile= "TestConfigCache")]
// GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项的更多相关文章

  1. 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

    最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...

  2. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  3. 如何在ASP.NET MVC和EF中使用AngularJS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...

  4. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

  5. 解析ASP.NET Mvc开发之删除修改数据

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 4)解析ASP.NET Mvc开发之EF延迟加载 ...

  6. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  7. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能

    在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...

  8. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

  9. 7.ASP.NET MVC 5.0中的Routing【路由】

    大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...

随机推荐

  1. Angularjs快速入门(一)

    这系列是看<用angularjs开发下一代web应用>的笔记. angular也接触几个月,总觉得不甚明白,写起来总是不那么如意.希望这本书看完了可以改变现在的状况.好了废话不多说开始: ...

  2. HTC开放Vive Tracker代码啦!

    (52VR网2017年5月2日)HTC正在为工作室创建的Vive Tracker项目发布教程和项目文件,作为VR开发人员的新资源. 该公司希望能够让更多的开发者能够在开发Vive VR耳机时制作自己的 ...

  3. 关于在"a"标签中添加点击事件的一些问题

    昨天做修改页面跳转时遇到一个问题,如果a标签的"href"属性为空的话,比如这样<a href="" onclick="roleupdate() ...

  4. 我眼中的微信小程序

    开始关注微信小程序是从去年8月份开始,当时它还没这么"火",而且当时我个人对其的发展也并不看好. 其一:是因为微信是第三方软件,把我的用户数据和信息挂载在微信上这样真的可靠吗?有朋 ...

  5. 1018 Big Number

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  6. IOS开发常用的基础方法

    .//退出键盘 [self.view endEditing:YES]; 隐藏手机上方的状态栏 -(BOOL)prefersStatusBarHidden{ return YES; } //获取当前控制 ...

  7. UEditor上传图片到七牛C#(后端实现)

    由于个人网站空间存储有所以选择将图片统一存储到七牛上,理由很简单 1  免费10G 的容量  ,对个人网站足够用 2  规范的开发者文档 和完善的sdk(几乎所有热门语言sdk) 整体思路 图片上传七 ...

  8. java中一个重要思想:面向对象

    面向对象: 1, 面向过程的思想(合适的方法出现在合适的类里面) 准备去一个地方: 先买车, 挂牌, 开导航, 踩油门, 过黄河, 穿越珠穆朗玛峰... 2, 面向对象的思想 我开着车去, 车怎么去随 ...

  9. 使用函数指针调用C++虚函数

    基本概念: 1. 函数指针,一个地址指针变量,其值指向代码区的某个函数首地址. 2. 虚函数,可以被子类覆写的C++成员函数.由虚函数表实现. 3. 虚函数表指针(vpt),指向虚函数表首地址的指针, ...

  10. /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference toTIFFIsTiled@LIBTIFF_4.0'

    今天编译caffe ,本来编译过无数次caffe了,基本坑都能解决的.但这次惹恼我了.一直搞不定. 错误信息是这样的: /usr/lib/x86_64-linux-gnu/libopencv_high ...