EasyUIASP.NET MVC开发学习进程中遇见的底细难点以及注意事项

一、datagrid中JS函数字传送值难题:

    columns:

{
田野: ‘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)1般都以三个int类型,如若是所传的值是字符串,则必要注意加转移字符符号。例如传值为分类名称则应当如下代码:

{
田野: ‘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那样的名号,尽量防止那样的重名。

 

三、选取四个递归算法格式化展现多级分类名称

      效果如下图:

     EasyUI 1

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));
}
}
}

四、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>

 

伍、MVC数据注释及表明引用

using System.ComponentModel.DataAnnotations;

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

陆、项目中添加了MVC引用,不过平昔编写翻译不成事,总是提示System.Web中不分包Mvc的命名:FlagType.SelectListItems

    最终消除:项目.Net FrameWork版本统一。

 

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

假使页面加了:<%@ OutputCache Duration=”60″ VaryByParam=”none”
%>,大概造成页面分页不符合规律,尽量不要使用页面缓存。

 

捌、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(“已有1样的模块编码”);
}
});

});

});

</script>

 

玖、 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 文件。

EasyUI 2

(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去持久化数据。

EasyUI 3

ViewData

    • ViewData 是二个一连自ViewDataDictionary类的字典对象。
      public ViewDataDictionary ViewData { get; set; }
    • ViewData 用来从controller中传值到相对应的view中。
    • 生命周期仅设有于近来此番请求。
    • 假若产生重定向,那么值将会被清空。
    • 从ViewData中取值时索要开始展览类型转换和Null Check以幸免十分。

ViewBag

    • ViewBag ViewBag是一个动态属性,是基于C# 四.0的动态语言的表征。
      public Object ViewBag { get;}
    • 是对ViewData的1次包装,也是用来从controller中传值到相呼应的view中。
    • 生命周期仅存在于如今此番请求。
    • 倘若发生重定向,那么值将会被清空。
    • 从ViewBag中取值时不必要举行类型转换。

TempData

  • TempData
    是七个一而再于TempDataDictionary类的字典对象,存款和储蓄于Session中 。
    public TempDataDictionary TempData { get; set; }
  • TempData 用来进行跨页面请求传值。
  • TempData被呼吁后生命周期即结束。
  • 从TempData中取值时需求开始展览类型转换和Null Check避防止至极。
  • 珍视用来囤积1回性数据新闻,比如error messages, validation
    messages。
    详情可参照:TempData知多少
    Session
  • ASP.NET
    MVC中Session是Controller中的三天品质,Session是HttpSessionStateBase类型。
    public HttpSessionStateBase Session { get; }
  • Session保存数据直到用户会话截止(暗许session过期时间为20mins)。
  • Session对富有的央求都有效,不仅仅是纯粹的跳转。
  • 从Session中取值时索要开始展览类型转换和Null Check以幸免极度。

           1二、数据评释(数据注释)

                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 – 限制属性的值在某1区间
  • StringLength – 钦赐string类型属性的细微和最大尺寸
  • 马克斯Length – 钦定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去幸免克罗丝 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();
        }