Asp.net MVC知識積累

 1、知識積累javascript

1.Controller中的ViewBag.key= value能夠做爲回傳參數,在視圖return PartialView("分部視圖", 數據)中,經過 @ViewBag.addColName調用html

2.合理利用隱藏標籤存值<input type="hidden" id="sql" value="@ViewBag.sql" />java

3.視圖經過Model傳值給分部視圖    mysql

視圖控制器ViewBag.OrderField = orderField;   return View("Index", model);    視圖Index中@Html.Partial("_highRefListsPager", Model)   <input id="orderFieldHidden" type="hidden" value="@ViewBag.OrderField"/>web

4.使用Bundle 減小請求數sql

一個頁面有不少圖片 、JavaScript 和 CSS 要加載進來, 獲取每個資源瀏覽器都要發起一個請求(不考慮緩存),請求多的話,網頁加載的速度確定不快,因而咱們考慮到去減小請求數,最簡單的方法是把JS和CSS文件合併,可是,合併之後,破壞了原有的文件結構,何況不一樣的頁面須要不一樣的文件組合。那麼,能不能根據須要動態組合文件呢,ASP.NET的Bundle爲咱們解決了這個問題。chrome

5.頁面佈局採用div包裹分部視圖的方式   數據庫

<div>@Html.Partial("分部視圖", Model)</div>json

6.佈局瀏覽器

@section header {
    @RenderSection("header", required: false)
}
@Html.Partial("_headerAnalyzer")
@RenderBody()
@Html.Partial("_footer")
@section FooterScripts {
    @RenderSection("FooterScripts", required: false)
}

 7.緩存

[OutputCache(Duration = AppSettings.OutputCacheTime)]
public ActionResult HighRefInit()
 {
      return View("Index", model);        
 }

8.多個out參數 

 class Program
    {
        static void Main(string[] args)
        {
            int a=1,b, c;
            Out(a,out b,out c);
            Console.WriteLine(string.Format("a={0},b={1},c={2}",a.ToString(), b.ToString(), c.ToString()));
            Console.ReadKey();
        }
        public static int Out(int a,out int b,out int c)
        {
            b = a + 1;
            c = a + 2;
            return a;
        }

    }

結果:a=1,b=2,c=3 

9.Dictionary性能最好

HashSet<T>
IList<T> fn = new List<T>();
Dictionary<T, T> fnList = new Dictionary<T, T>(); 

10.獲取程序的基目錄:System.AppDomain.CurrentDomain.BaseDirectory

11.Stopwatch類

Stopwatch watch = new Stopwatch();
watch.Start();
//處理代碼
watch.Stop();
Console.WriteLine("\n耗費時間:" + watch.ElapsedMilliseconds);

12.得到Jquery對象的規範寫法

 var $obj = $("#Id");

判斷對象是否存在採用$("#Id").Lengrh>0

13.FTP
http://www.cnblogs.com/name-lh/archive/2007/04/28/731528.html

14.TempData

要實現跨Action的變量傳遞有就不能用ViewBag了,你能夠用Session,TempData。Session是整個網站會話級別的,生命週期比較長,若是要存一次性的數據用Session有點浪費,因此這裏建議用TempData,由於TempData能夠作爲Controller或者Action跳轉時的臨時存儲變量或數據的容器。

public class HomeController : Controller  
  {  
      public ActionResult Index()  
      {  
          TempData["D"] = "WT";  
          return Redirect("Index1");  
      }  
  
      public ActionResult Index1()  
      {  
          return Redirect("Index2");  
      }  
  
      public ActionResult Index2()  
      {  
          return Redirect("Index3");  
      }  
  
  
      public ActionResult Index3()  
      {  
          ContentResult result = new ContentResult();  
  
          result.Content = TempData["D"].ToString();  
  
          return result;  
      }  
  }  
輸入 Home/Index,此時發現頁面已經跳轉到:Home/Index3,且輸出「WT」。彷佛說明:說明TempData會保留未使用的值,並非說"TempData只存放一次數據,到第三個Action時,第一個Action存放的數據就失效了"。

15.構建View實體Model

public class PagerViewInfo<T, R>
    {
        public List<T> List { get; set; }
        public R Param { get; set; }
    }

    public class PagerViewDataTable<Dt, R>
    {
        public DataTable DT { get; set; }
        public R Param { get; set; }
        public string Flag { get; set; }
    }

16.靈活構建xml配置

17.TempData,ViewData和ViewBag的比較

18.有時須要在ASP.NET MVC4的視圖的@model中使用多個類型的實例,.NET Framework 4.0版本引入的System.Tuple類能夠輕鬆知足這個需求。

  Controller

  public ActionResult Index()
        {
            User user = new User() { Name="mf", Status=1 };
            HydUser hydUser = new HydUser() { Name="沐風", Status=1 };
            return View(Tuple.Create(user, hydUser));// 返回一個Tuple對象,Item1表明user、Item2表明hydUser
        }

  View

@model Tuple<CommonFoundation.Model.User, CommonFoundation.Model.HydUser>  
<h2>@Model.Item1.Name </h2>
<h2>@Model.Item2.Name </h2>

19.經過方法@Html.Action("IndexSub", "Home")緩存指定的局部視圖

[OutputCache(Duration = 60 * 60 * 24)]
public ActionResult IndexSub()
{
    return PartialView(list);
}

20.Html.Action、html.ActionLink與Url.Action的區別

  1)html.ActionLink返回的指向指定controller、指定action的超連接標籤<a>標籤.若是沒有指定controller,則默認爲本頁面對應的Controller.

  如@Html.ActionLink(「連接文本」、「someaction」、「somecontroller」,new { id = " 123 " },null)
  生成:
  < a href = " / somecontroller / someaction / 123 " >連接文本</a>

  2)Html.Action能夠執行一個控制器的action,並將返回結果做爲html string。

  3)Url.Action返回的是指定控制器指定action的完整URL地址,不含<a>標籤

21. return HttpNotFound();

22.view:默認會先搜索與Controller同名的目錄,若是搜索不到,就會改成搜索Shared目錄,因此能夠將公用的view放到Shared目錄。

23.return new EmptyResult()或者 return;不須要回傳任何數據。

24.JavaScriptResult

public ActionResult JavaScript()
 {
   return JavaScript("alert('Hello World!');");
 }

25.@Url.Action("Index", "Home", new { Area = "" }) 

26.Html.RenderAction

容許你直接調用某一個Action,並把返回的結果直接顯示在當前調用的View中。好比:@{Html.RenderAction("Show", "Tag");} 此時,TagController中的Show方法會被調用。因爲這時調用的是一個Action方法,所以能夠在此方法中完成你想要完成的各類操做,好比從數據庫,文件等獲取數據,寫數據等並返回結果。

[OutputCache(Duration = 24 * 60 * 60)]
public ActionResult GetFeedMsg()
{
     return Content("ok");
}

27.TimeSpan 

DateTime endTime = userAcQuery.CreatTime;
DateTime nowTime = DateTime.Now;
TimeSpan ts = nowTime.Subtract(endTime);
int hours =Convert.ToInt32(ts.TotalHours);

28.敏感詞過濾

29.MVCExtend

public static class MVCExtend
    {
        public static string RenderViewToString(this ControllerContext context, string viewName, object model)
        {
            if (string.IsNullOrEmpty(viewName))
                viewName = context.RouteData.GetRequiredString("action");

            context.Controller.ViewData.Model = model;

            using (var sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
                var viewContext = new ViewContext(context,
                                  viewResult.View,
                                  context.Controller.ViewData,
                                  context.Controller.TempData,
                                  sw);
                try
                {
                    viewResult.View.Render(viewContext, sw);
                }
                catch (Exception ex)
                {
                    throw;
                }

                return sw.GetStringBuilder().ToString();
            }
        }
    }

30.try...catch...finally

        try
        {
           
        }
        catch(Exception ex)
        {
           
        }
        finally
        {
          
        }

 

31.@Html.Partial

1 <div class="sareaCot" id="sareaCot_CotAdv">
2 @{
3    Dictionary<string, Object> returnParam = (Dictionary<string, Object>)ViewBag.Param;             
4  }
5   @Html.Partial("_CotAdv", returnParam)
6 </div>

32.mysql

1  MySqlService mysqlHelper = new MySqlService(mysqlConnectionString);
2  List<User> user= mysqlHelper.ExecuteModelList("SELECT * FROM USER   LIMIT   20", null, ModelFromDataRow);
3  private User ModelFromDataRow(DataRow dr)
4    {
5      return DataRowToModel.ToModel<User>(dr);
6    }

34.Application.DoEvents();

private void button1_Click(object sender, EventArgs e)
        {
            int seek = 0; ;
            string insertSql = string.Empty;
            int totalCount=10000;
            for (int i = 0; i < totalCount; i++)
            {
                seek++;
                lblStatus.Text = string.Format("處理標籤,共 :{0},已處理:{1})", totalCount, seek.ToString());
                Application.DoEvents();
            }
        }

35. jQuery live 重複綁定,致使屢次執行的解決方式

//先經過die()方法解除,再經過live()綁定  
$(「#selectAll」).die().live(「click」,function(){  
//事件運行代碼  
});  

36. 利用JS設置默認圖片

<img src="@Model.PicPath" alt="做者照片" title="做者照片" onerror="javascript:this.src='@Url.Content("~/Content/images/default.jpg")'"/>

37.推薦使用ViewBag

38.能夠直接鍵入 prop + 兩次 TAB 鍵,就能夠快速完成屬性的編寫

39..net析構函數

        #region Dispose
        /// <summary> 
        /// 清理全部正在使用的資源。
        /// </summary>
        /// <param name="disposing">若是應釋放託管資源,爲 true;不然爲 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #endregion

40.同一sessionid不能併發,session鎖

41.C# String.Format格式化json字符串中包含"{" "}"報錯問題

  json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, strJSON));直接會報錯

  字符串中包含{或者},則須要用{{ 來代替字符 {,用}} 代替 }

  如:json.Append(String.Format("{{\"total\":{0},\"row\":{1}}}", lineCount, strJSON));

42.List去重

 string CYNAME1 = "安徽經濟年鑑;安徽經濟年鑑;安徽經濟年鑑;安徽經濟年鑑";
 IList<string> list = CYNAME1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList().Distinct().ToList();
 string  joinStr= string.Join(";", list);

43.Tuple類型

44.ASP.net Session阻塞、Session鎖、MVC Action請求阻塞問題

    能夠爲本Controller增長如下特性,可是本Controller都不能修改Session了,只能讀取

    [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

45.SortedDictionary<string, object>(StringComparer.Ordinal);

46.iis7 發佈mvc 遇到的HTTP錯誤 403.14-Forbidden Web 服務器被配置爲不列出此目錄的內容

iis 7上發佈mvc報錯:403.14-Forbidden Web 服務器被配置爲不列出此目錄的內容

折騰了半天,提示裏面的解決方法是:

  • 若是不但願啓用目錄瀏覽,請確保配置了默認文檔而且該文件存在。
  • 使用 IIS 管理器啓用目錄瀏覽。
    1. 打開 IIS 管理器。
    2. 在「功能」視圖中,雙擊「目錄瀏覽」。
    3. 在「目錄瀏覽」頁上,在「操做」窗格中單擊「啓用」。
  • 確認站點或應用程序配置文件中的 configuration/system.webServer/directoryBrowse@enabled 特性被設置爲 True。

按照該方法改後 ,發現網頁運行界面進去的變成了目錄結構,後來發現改配置文件web.config配置文件的配置節後,網站就能夠正常使用了,記錄下哦。

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer>

要設置<modules>節的值爲true, 而目錄瀏覽啓用或禁用其實都沒影響的。

47.解決Web部署 svg/woff/woff2字體 404錯誤

 打開服務器IIS管理器,找到MIME類型。

 添加MIME類型 添加三條:  

       文件擴展名      MIME類型 

.svg             image/svg+xml
.woff            application/x-font-woff
.woff2          application/x-font-woff

48.以最高級模式渲染文檔

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

49.string.IsNullOrEmpty 和 string.IsNullOrWhiteSpace的區別

string.IsNullOrEmpty方法是判斷字符串是否爲:null或者string.Empty;string.IsNullOrWhiteSpace方法是判斷null或者全部空白字符,功能至關於string.IsNullOrEmpty和str.Trim().Length總和。

50.ASP.NET MVC中如何使用RenderSection渲染節點

    @RenderBody():呈現子頁的主體內容

  @RenderSection():呈現特別的節部分。

  HelperResult RenderSection(string name, bool required = true);

  required默認爲true必須覆寫,設爲false則爲可選覆寫;

https://blog.csdn.net/sgear/article/details/37599883

51.遠程服務器返回錯誤: (405) 不容許的方法

使用微軟的東西,常常會遇到誤導人的錯誤。

此次在將站點從IIS 7.5遷移至IIS 8.0後,調用Web Service(.asmx)時出現錯誤提示:遠程服務器返回錯誤: (405) 不容許的方法。

這個問題居然是由於IIS 8.0默認沒有添加*.svc的映射。

解決方法:

進入Server Manager->Add Roles and Features Wizard->Features,在.NET Framework 4.5功能->WCF服務中選中「HTTP激活」(HTTP Activation),完成安裝後,問題解決。

 52.刷新dns

    因爲本次升級涉及ip地址變化、http重定向爲https等內容,所以在升級完成後若是仍然訪問如鵬網有問題,請嘗試命令行執行「ipconfig /flushdns」來刷新dns,而且清空瀏覽器緩存。

53.'2018-06-020 08:00:00' 轉2018062008

select FORMAT(CONVERT(datetime,'2018-06-020 08:00:00'),'yyyyMMddHH') AS sortDate

54.mvc自定義全局異常處理

<system.web>
<!--添加customErrors節點 定義404跳轉頁面-->
 <customErrors mode="On">
      <error statusCode="404" redirect="/Error/Path404" />
    </customErrors>
 </system.web>
//Global文件的EndRequest監聽Response狀態碼
protected void Application_EndRequest()
{
  var statusCode = Context.Response.StatusCode;
    var routingData = Context.Request.RequestContext.RouteData;
    if (statusCode == 404 || statusCode == 500)
    {
      Response.Clear();
       Response.RedirectToRoute("Default", new { controller = "Error", action = "Path404" });
    }
}

55.HttpActionContext

actionContext.Request.Properties[Key] = stopWatch;

Stopwatch stopWatch = actionContext.Request.Properties[Key] as Stopwatch;
相關文章
相關標籤/搜索