AspNet Mvc一些总结

RestaurantReview.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;
using Antlr.Runtime;namespace Kwin.AspNetMvc.OdeToFood.Models
{/// <summary>/// /// </summary>/// <remarks>/// 1.Bind特性用于锁定可以进行模型绑定的属性,///     [Bind(Include = "City, Country, Rating")] ,白名单的形式,推荐///      [Bind(Exclude = "Id, Name")]                    ,黑名单的形式/// /// 可以在三个位置设置:/// 1.Global.asax.cs 类型列表中设置绑定规则/// 2.在类定义上<see cref="RestaurantReview"/>/// 3.在方法参数上/// --------------------/// 2.数据验证方法:/// http://developer.51cto.com/art/201404/435126.htm/// http://www.cnblogs.com/zhangkai2237/archive/2012/12/12/2814825.html/// /// 1).数据验证,方法:实现IDataErrorInfo,演示:<see cref="RestaurantReview"/>/// 成员函数在UpadtaModel时会被调用,(永远不要相信客户端,服务器这边再检查一遍)/// --------------------/// 2).数据验证,方法:继承ValidationAttribute///  演示MaxWordsAttribute<see cref="MaxWordsAttribute"/>/// 这个特性和普通数据注解的区别是普通数据注解仅仅只能验证Model的一个属性,/// 需要注意的是,自定义的数据注解不支持客户端验证,所有的数据需要提交之后再服务端验证,所以如果要同时实现客户端验证需要自己写js验证/// /// 3).数据验证,方法:IValidatableObject  /// 这个接口是为了实现Model的自验证(self-validating)的,是asp.net mvc3 新增的验证特性。/// 这个特性和普通数据注解的区别是普通数据注解仅仅只能验证Model的一个属性,/// 而实现了IValidatableObject接口的自验证则在Model的级别来验证/// /// 4).人工验证 /// </remarks>//[Bind(Include = "Id, Name, City, Country, Rating")]public class RestaurantReview : IValidatableObject // ,IDataErrorInfo
    {Dictionary<string, string> _errorDictionary = new Dictionary<string, string>();private int rating;public int Id { get; set; }[Required(ErrorMessage = "{0}不能为空!LoL")][Display(Name = "名称")][Remote("CheckNameIsExisted", "Account", HttpMethod = "POST",ErrorMessage = "该用户名已经被使用")][MaxWords(10,ErrorMessage = "{0}你输入的太多了")]//[StringLength(6)]
        public string Name { get; set; }[Required][Display(Name = "城市")][DisplayFormat(NullDisplayText = "N/A")]public string City { get; set; }[Required][Display(Name = "国家")][DisplayFormat(NullDisplayText = "N/A")]public string Country { get; set; }[Required(AllowEmptyStrings = true)][Display(Name = "等级")][Range(typeof(int),"1","10",ErrorMessage = "{0}必须是{1}和{2}之间的数字")]public int Rating{get { return this.rating; }set{bool IsNum = Regex.IsMatch(Convert.ToString(value), @"^\d+$");if (!IsNum){_errorDictionary.Add("Rating", "等级必须是数字");}this.rating = value;}}#region IDataErrorInfo Members/// <summary>/// 获取一个单一的错误消息,指示对象实例中的错误/// </summary>
        public string Error{get{return string.Empty; //这里没有实现,返回值一个空的错误消息
                }}/// <summary>/// 用来接收参数和返回一个错误消息指示属性中的错误/// </summary>/// <param name="columnName"></param>/// <returns></returns>/// <remarks>/// 服务端再次进行数据验证(原则:永远不要相信客户端)。/// /UpadtaModel(model)时会调用该方法,/// 如果返回值不为string.Empty,该返回值会被添加到ModelState.Values属性中,并将///        ModelState.IsValid设置为false。/// </remarks>public string this[string columnName]{get{if (_errorDictionary.ContainsKey(columnName)){return _errorDictionary[columnName];}return string.Empty;}} #endregion#region IValidatableObject/// <summary>/// /// </summary>/// <param name="validationContext"></param>/// <returns>返回类型是 IEnumerable(一种迭代器接口类型)</returns>public IEnumerable<ValidationResult> Validate(ValidationContext validationContext){if (Rating < 2 && Name.ToLower().Contains("hacker")){yield return new ValidationResult("sorry,Mr.Hacker, you can't do this", new[] { "Name" });}}#endregion}
}

View Code

        [HttpPost]//Controller中也可以直接接受Post的请求,可以不需要[Httppost]注释:
        public ActionResult CheckNameIsExisted(string name){bool result = name != "admin";return Json(result, JsonRequestBehavior.AllowGet);}

ReviewsController.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Configuration;
using System.Data.Objects.DataClasses;
using System.Linq;
using System.Security.Cryptography;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using Kwin.AspNetMvc.OdeToFood.Models;
using PagedList;namespace Kwin.AspNetMvc.OdeToFood.Controllers
{public class ReviewsController : Controller{#region 测试数据,private static bool _hasInitilizeDatas = false;private static List<RestaurantReview> _restaurantReviews = new List<RestaurantReview>(){new RestaurantReview(){Id = 1,Name = "Cidde ha",City = "shanghai",Country = "China",Rating = 10},new RestaurantReview(){Id = 2,Name = "张氏",City = "shanghai",Country = "中国",Rating = 8},new RestaurantReview(){Id = 3,Name = "Bill",City = "shanghai",Country = "UK",Rating = 6},new RestaurantReview(){Id = 4,Name = "Stevien Jason",City = "shanghai",Country = "英国",Rating = 7}};#endregionpublic ReviewsController(){if (!_hasInitilizeDatas){InitilizeDatas();_hasInitilizeDatas = true;}}/// <summary>/// 模拟数据/// </summary>private static void InitilizeDatas(){Random random = new Random();for (int i = 1000; i < 2100; i++){RestaurantReview restaurantReview = new RestaurantReview(){Id = i,Name = string.Format("老字号餐馆{0}", Convert.ToString(i)),//City = "N/A",//Country = "N/A",Rating = random.Next(1, 10)};_restaurantReviews.Add(restaurantReview);}}public static bool HasInitilizeDatas{get { return _hasInitilizeDatas; }set { _hasInitilizeDatas = value; }}public ActionResult Index(string searchKey = null, int currentPage = 1){int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSzie"]);var model = _restaurantReviews.Where(r => searchKey == null || r.Name.ToLower().Contains(searchKey.ToLower().Trim())).OrderByDescending(r => r.Rating).Select(r => new RestaurantReview(){City = r.City,Country = r.Country,Id = r.Id,Name = r.Name,Rating = r.Rating}).ToPagedList(currentPage, pageSize); //局限:使用ToPagedList后不能用@Html.DisplayNameFor(model => model.Name)//.ToList();if (Request.IsAjaxRequest()){System.Threading.Thread.Sleep(1000 * 1);//模拟处理数据需要的时间//return View(model)会返回整个页面,所以返回部分视图。return PartialView("_RestaurantPatialView", model);}return View(model);}//// GET: /Reviews/Details/5/// <summary>///关于使用System.Web.Mvc.Ajax的说明:/// Controller的Action方法:///    (1)当显式添加[HttpPost],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "post",///    (2)当显式添加[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "get",///     (3) 当都没有显式添加[HttpPost]和[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod可以为 "get"也可以为"post",/// </summary>/// <param name="id"></param>/// <returns></returns>public ActionResult Details(int id=1){var model = (from r in _restaurantReviewswhere r.Id == idselect r).FirstOrDefault();if (Request.IsAjaxRequest()){return PartialView("_RestaurantDetails", model);}return View(model);}//// GET: /Reviews/Createpublic ActionResult Create(){return View();}//// POST: /Reviews/Create#region FormColletion//[HttpPost]//[ValidateAntiForgeryToken]//public ActionResult Create(FormCollection collection)//{//    try//    {//        // Add insert logic here//        if (ModelState.IsValid)//        {//            var model = new RestaurantReview();//            TryUpdateModel(model);//            _restaurantReviews.Add(model);//        }//        return RedirectToAction("Index");//    }//    catch//    {//        return View();//    }//} #endregion#region 使用ViewModel实体/// <summary>/// /// </summary>/// <param name="model"></param>/// <returns></returns>/// <remarks>///   ValidateAntiForgeryToken特性:///      与View中的@Html.AntiForgeryToken()一起使用,///   防止CSRF攻击/// </remarks>
        [HttpPost][ValidateAntiForgeryToken] public ActionResult Create(RestaurantReview model){try{if (ModelState.IsValid){_restaurantReviews.Add(model);}return RedirectToAction("Index", "Reviews");}catch (Exception){return View();}}#endregion//// GET: /Reviews/Edit/5public ActionResult Edit(int id){return View();}//// POST: /Reviews/Edit/5#region 使用FormCollection//[HttpPost]//[ValidateAntiForgeryToken] //与View中的@Html.AntiForgeryToken()一起使用//public ActionResult Edit(int id, FormCollection collection)//{//    try//    {//        if (ModelState.IsValid)//        {//            //Add update logic here//            var model = (from r in _restaurantReviews//                         where r.Id == id//                         select r).First();//            TryUpdateModel(model);//        }//        return RedirectToAction("Index");//    }//    catch//    {//        return View();//    }//}#endregion#region 使用ViewModel实体/// <summary>/// /// </summary>/// <param name="model"></param>/// <returns></returns>/// <remarks>/// 1.ValidateAntiForgeryToken特性:///      与View中的@Html.AntiForgeryToken()一起使用,///   防止CSRF攻击/// ///2. Bind(Include="....")是用来解决Mass Assignment漏洞///   Mass Assignment漏洞演示:///   去掉Bind(Include="....")///     public ActionResult Edit(RestaurantReview model)/// ///   去掉Edit.cshtml中的某个字段如:Name的编辑标签(即:让用户无法修改Name字段)///         <div class="editor-field">///             @Html.EditorFor(model => model.Name)///             @Html.ValidationMessageFor(model => model.Name)///         </div>///   ///   输入如下连接:///   Edit方法路由后面添加参数?Name=hack(Name会自动绑定到模型绑定类型RestaurantReview中的Name属性),///   即:///   http://localhost:3951/Reviews/Edit/1003?Name=hack///   ///   经测试无上面的Mass Assignment,可能新aspnet mvc已经修复该bug/// </remarks>
        [HttpPost][ValidateAntiForgeryToken]//public ActionResult Edit([Bind(Include = "Id, Name,City, Country, Rating")]RestaurantReview model)public ActionResult Edit(RestaurantReview model){try{if (ModelState.IsValid){var restaurentView = (from r in _restaurantReviewswhere r.Id == model.Idselect r).FirstOrDefault();TryUpdateModel(restaurentView);return RedirectToAction("Index");}return View();}catch (Exception ex) {ModelState.AddModelError("", ex.Message); //给View返回一个错误消息,最终交给@Html.ValidationSummary显示。return View();}}#endregion//// GET: /Reviews/Delete/5public ActionResult Delete(int id){var models = from restaurantReview in _restaurantReviewswhere restaurantReview.Id == idselect restaurantReview;var model = models.First();//var model = _restaurantReviews.SingleOrDefault();return View(model);}//// POST: /Reviews/Delete/5
[HttpPost][ValidateAntiForgeryToken]public ActionResult Delete(int id, FormCollection collection){try{// Add delete logic herevar model = (from r in _restaurantReviewswhere r.Id == idselect r).First();_restaurantReviews.Remove(model);return RedirectToAction("Index");}catch{return View();}}[HttpPost]//Controller中也可以直接接受Post的请求,可以不需要[Httppost]注释:public ActionResult CheckNameIsExisted(string name){bool result = name != "admin";return Json(result, JsonRequestBehavior.AllowGet);}[ChildActionOnly]public ActionResult BestReview(){var starRestaurent = from r in _restaurantReviewswhere r.Rating >= 9orderby r.Rating descending select  r;return PartialView("_BestReview", starRestaurent.Take(5));}/// <summary>/// /// </summary>/// <param name="term"></param>/// <returns>///           //http://localhost:3951/Reviews/autocompleted?term=老//返回JSON,如下格式://  [//    {"label":"老字号餐馆1000"},{"label":"老字号餐馆1001"},{"label":"老字号餐馆1002"},//    {"label":"老字号餐馆1003"},{"label":"老字号餐馆1004"},{"label":"老字号餐馆1005"},//    {"label":"老字号餐馆1006"},{"label":"老字号餐馆1007"},{"label":"老字号餐馆1008"},{"label":"老字号餐馆1009"}//  ]/// </returns>public ActionResult AutoCompleted(string term){var model = _restaurantReviews.Where(r=>r.Name.ToLower().Contains(term.ToLower().Trim())).Take(10).Select(r=> new{label = r.Name //匿名对象的字段名必须是label,因为ui.item.label
                });//serialize model into JSON formatreturn Json(model,JsonRequestBehavior.AllowGet);}}
}

Index.cshtml

@*@model IEnumerable<Kwin.AspNetMvc.OdeToFood.Models.RestaurantReview>*@
@model IPagedList<RestaurantReview>@{ViewBag.Title = "我的推荐:餐厅系列";ViewBag.Message = "美味不断,吃遍填下";
}@section mytile{<section class="featured"><div class="content-wrapper"><hgroup class="title"><h1>@ViewBag.Title</h1><br/><h2>@ViewBag.Message</h2></hgroup><p></p></div></section>
}@* -----------1.不用Ajax--------------------------- *@
@*<form method="post"><input type="search" name="searchKey"/><input type="submit" value="按名称搜索"/></form>*@@* -----------2.System.Web.Mvc.Ajax---------------------------不用手工为Form添加属性标签,MVC框架自己添加了,Ajax.BeginForm生成的标签如下:<form id="form0" method="post" data-ajax-url="/Reviews"data-ajax-update="#restaurantList"data-ajax-mode="replace"data-ajax-method="post"data-ajax-loading-duration="2000"data-ajax-loading="#loding"data-ajax="true"action="/Reviews" novalidate="novalidate">------------------------------------------------------------------*@@*@using (Ajax.BeginForm(new AjaxOptions(){HttpMethod = "post",Url = @Url.Action("Index","Reviews"),InsertionMode = InsertionMode.Replace,UpdateTargetId = "restaurantList",LoadingElementId = "loding",LoadingElementDuration = 2000})){<input type="search" name="searchKey"/><input type="submit" value="按名称搜索"/>}*@@* -----------3.Ajax--------------------------------------需要手工为Form添加些属性标签,用于锚点模仿MVC框架的构建自己的“非介入式Javascript”模式生成的form为:<form data-otf-ajax-updatetarget="#restaurantList" data-otf-ajax="true" action="/Reviews" method="post" novalidate="novalidate">-------------------------------------------------------*@
<form method="post"action="@Url.Action("Index")"data-otf-ajax="true"data-otf-ajax-updatetarget="#restaurantList"><input type="search" name="searchKey" data-oft-ajax-autocompleted="@Url.Action("AutoCompleted")" /><input type="submit" value="按名称搜索" />
</form><p><strong>@if (User.Identity.IsAuthenticated){Html.ActionLink("添加餐馆(登录后)", "Create");}@Html.ActionLink("添加餐馆", "Create")</strong></p><div id="loding" hidden="hidden"><img class="smallLoadingImg" src="@Url.Content("~/Content/images/loading.gif")" />
</div>
@*Ajax异步更新目标html元素*@
<div id="restaurantList">@{if (@Model.Any() ){//用Html.Partial出现不能显示的问题。原因待查,改用Html.RenderPartialHtml.RenderPartial("_RestaurantPatialView",Model);}else{<img src="@Url.Content("~/Content/images/NotFoundCryingFace.jpg")"/><strong><font color="red">抱歉,没有任何餐馆</font></strong>}}
</div>

View Code

odf.js

$(function () {/*ajaxFrom*/var ajaxFormSubmit = function() {var $form = $(this);var ajaxOption = {type: $form.attr("method"),url: $form.attr("action"),data: $form.serialize()};$.ajax(ajaxOption).done(function(data) {var updateTargetId = $form.attr("data-otf-ajax-updatetarget");var $updateTarget = $(updateTargetId);if ($updateTarget.length > 0) {var $returnHtml = $(data);$updateTarget.empty().append(data);$returnHtml.effect("highlight",6000);}});return false;};$("form[data-otf-ajax='true']").submit(ajaxFormSubmit);/*AutoCompleted*/var submitAutoCompleted = function(event, ui) {var $input = $(this);$input.val(ui.item.label);var $form = $input.parents("form:first");$form.submit();};var createAutoCompleted = function() {var $input = $(this);var ajaxOption = {source: $input.attr("data-oft-ajax-autocompleted"), //告诉AutoComplete组件去哪里获取数据select: submitAutoCompleted,                        //选择某选项后,要处理的逻辑
        };$input.autocomplete(ajaxOption);}$("input[data-oft-ajax-autocompleted]").each(createAutoCompleted);/*分页,使用 PagedList.dll,*/var getPage = function() {var $a = $(this);var ajaxOption = {url: $a.attr("href"),type: "post",data:$("form").serialize()  //把表单中的数据也一起提交,比如,搜索关键字。结果是:在搜索关键字得到的结果上进行分页。
};$.ajax(ajaxOption).done(function(data) {var updateTargetId = $a.parents("div.pagedList").attr("data-otf-ajax-updatetarget");var $updateTarget = $(updateTargetId);var $returnHtml = $(data);$updateTarget.empty().append(data);$returnHtml.effect("highlight", 6000);});return false;}$(".main-content").on("click", ".pagedList a",getPage);//$("#Pagination").pagination();

});       

View Code

Review.js

$(function() {$(".isStar").prepend('<del class="hot"></del>');//$(".isStar").append('<del class="hot"></del>');
});

-----------------------------------

TestAcitonResultController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Kwin.AspNetMvc.OdeToFood.Models;namespace Kwin.AspNetMvc.OdeToFood.Controllers
{public class TestAcitonResultController : Controller{[ActionName("RedirectToAction")] //为Action起了别名RedirectToAction,就不能用原来的TestRedirectToAction访问了public ActionResult TestRedirectToAction(){TestModel myTestModel = new TestModel(){IntParement = 100,StringPrarement = "TestModel->StringPrarement"};return RedirectToAction("TextRouteParement", "TestAcitonResult",new{id = "12",myparementString = "keasy5",myparementInt = 30,testModel = myTestModel});}public ActionResult TestRedirectToRoute(){return RedirectToRoute("Default", new { controller = "Home", action = "ForTestIndex", myparement = "keasy5" });}public ActionResult TestFile(){return File(Server.MapPath("~/Content/site.css"), "text/css");}public ActionResult TestJson(){return Json(new {Name = "Keasy5", Laction = "China"},JsonRequestBehavior.AllowGet);}public ActionResult TextRouteParement(string myparementString, int myparementInt, [ModelBinder(typeof(TestModelModelBinder))]TestModel testModel){var controller = RouteData.Values["controller"];var action = RouteData.Values["action"];var id = RouteData.Values["id"];var myparement2 = RouteData.Values["myparement"];var myparementForRequestForm = Request["myparement"]??"N/A";var messages = string.Format("controller={0},action={1},id={2},myparementString={3}, myparementInt={4},RouteData.Values[\"myparement\"]={5},testModel.IntParement={6},testModel.StringPrarement={7},Request[\"myparement\"]={8}",controller, action, id, myparementString, myparementInt, myparement2, testModel.IntParement, testModel.StringPrarement, myparementForRequestForm);return Content(messages);}}
}

View Code

TestModelModelBinder.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ModelBindingContext = System.Web.Http.ModelBinding.ModelBindingContext;namespace Kwin.AspNetMvc.OdeToFood.Models
{public class TestModelModelBinder : DefaultModelBinder{#region  IModelBinder Memberspublic override object BindModel(ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext){HttpRequestBase requestBase = controllerContext.HttpContext.Request;TestModel testModel = new TestModel();testModel.IntParement = Convert.ToInt32(requestBase["IntParement"]);testModel.StringPrarement = requestBase["IntParement"];/*            var value = base.BindModel(controllerContext, bindingContext);if (bindingContext.ModelType == typeof(TestModel))return value;*/return testModel;}#endregion}
}

View Code

--------------------------------------------------

TestActionFilerController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Kwin.AspNetMvc.OdeToFood.Filters;namespace Kwin.AspNetMvc.OdeToFood.Controllers
{//[HandleError]可以注释掉因为在FilterConfig已经定义了全局的HandleError,为所有的controller使用了[HandleError]public class TestActionFilterController : Controller{public ActionResult Index(){string messages = "TestActionFilterController index";return Content(messages);}[Authorize]public ActionResult TestAuthorize(){string messages = "TestAuthorize";return Content(messages);}public ActionResult TestHandleError(int id = 0){if (id == 0){throw new Exception("我是故意的,测试HandleError用的异常!");}/* 默认是显示一个bug异常页面,* 要是定制显示bug页面,先在web.cofng配置如下节点:* <system.web><customErrors mode="On"/>*/return Content("TestHandleError");}public ActionResult TestLog(){return Content("TestHandleError");}}
}

View Code

---------------------------------------------------

FilterConfig.cs

using System.Web;
using System.Web.Mvc;
using Kwin.AspNetMvc.OdeToFood.Filters;namespace Kwin.AspNetMvc.OdeToFood
{public class FilterConfig{public static void RegisterGlobalFilters(GlobalFilterCollection filters){//在这里定义的是全局的Filter,意味着所有的Controller都启用这里注册的Filter
filters.Add(new HandleErrorAttribute());filters.Add(new LogAttribute());}}
}

Filters/LogAttribute.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Mvc;namespace Kwin.AspNetMvc.OdeToFood.Filters
{[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]public class LogAttribute : ActionFilterAttribute{public override void OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);//写系统日志
        }public override void OnActionExecuting(ActionExecutingContext filterContext){base.OnActionExecuting(filterContext);}public override void OnResultExecuted(ResultExecutedContext filterContext){base.OnResultExecuted(filterContext);}public override void OnResultExecuting(ResultExecutingContext filterContext){base.OnResultExecuting(filterContext);}}
}

转载于:https://www.cnblogs.com/easy5weikai/p/3909236.html

【ASP.Net MVC】AspNet Mvc一些总结相关推荐

  1. AspNet MVC与T4,我定制的视图模板

    一. 遇到的问题 文章开头部分想先说一下自己的困惑,在用AspNet MVC时,完成Action的编写,然后添加一个视图,这个时候弹出一个添加视图的选项窗口,如下: 很熟悉吧,继续上面说的,我添加一个 ...

  2. ASP .NET Core Web MVC系列教程四:添加模型

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...

  3. ASP .NET Core Web MVC系列教程三:添加视图

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...

  4. ASP .NET Core Web MVC系列教程二:添加控制器

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程一:创建一个W ...

  5. ASP .NET Core Web MVC系列教程一:创建一个Web应用程序

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...

  6. ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

    本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...

  7. 初识 ASP.NET 3.5 MVC 开发

    在学习被停滞了N久以后,今天终于下定决心要继续了.过了太久堕落的生活也开始厌倦了.继续开始我的MVC学习之路. 目录机构: models 文件夹: 模型组件    还可以存放有关数据访问操作的一些类. ...

  8. asp.net core web mvc之异常

    与web api类似,asp.net core web mvc模板也是利用ExceptionHandler来处理错误,在starup的Configure配置数据发生时导向的/home/error pu ...

  9. [译]Introducing ASP.NET vNext and MVC 6

    原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...

  10. ASPNET MVC Error 403.14

    今天创建了一个新的ASPNET MVC 项目部署到本地, 生成成功后在浏览器中输入URL却发现报这个错 解决办法: 因为我的站点是4.5的,但是我没有设置Application Pool所以当前还是默 ...

最新文章

  1. Python-Numpy(3)矩阵基本操作
  2. qgridlayout 动态刷新
  3. 计算机网络crc校验实验报告,CRC校验实现-实验报告(附主要实现代码)
  4. 【POJ - 2976】【ZOJ - 3068】【SCU - 2992】Dropping tests (01分数规划)
  5. Python实现抓取CSDN博客首页文章列表
  6. Linux unit14
  7. Java中foreach 的用法以及注意事项
  8. 文档对象模型(DOM)
  9. SQLyog安装地址
  10. ERROR 999999: Error executing function. The table name is invalid. Failed to execute (Reclassify).
  11. Altium_Protel99SE圆线路板添加工艺边
  12. 数据分析:逻辑树分析模型
  13. 《东周列国志》第七十九回 归女乐黎弥阻孔子 栖会稽文种通宰嚭
  14. 爬虫入门教程-Spider
  15. uniapp登陆页面功能
  16. css3中的属性选择器有哪些,CSS3中属性选择器使用方法详解
  17. JavaScript增加和删除DOM节点
  18. 算法复习——分治法重点问题
  19. 运算符 相与、相或、相异或、取反、左移、右移
  20. 白盒测试——数据流测试

热门文章

  1. spring + ehcache 配置
  2. VSCode使用记录三:中文显示乱码、设置字体大小、常用快捷键
  3. ThinkPHP redirect 传参
  4. C#找出接口的所有实现类并遍历执行这些类的公共方法
  5. GUN/LINUX的文件类型
  6. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
  7. EF分组后把查询的字段具体映射到指定类里面的写法
  8. [LeetCode]Rotate List
  9. 【English】20190313
  10. 自定义微信小程序导航(兼容各种手机)