zoukankan      html  css  js  c++  java
  • ASP.NET MVC 3 入门级常用设置、技巧和报错

    1、ASP.NET MVC 3 如何去除默认验证

         这个默认验证是在web.config配置文件中设置的
        <add key="ClientValidationEnabled" value="true"/>设置为false就行了,
        这个是去掉所有model的默认验证,然后你可以在model中加上自己的验证,这样哪些属性需要验证,哪些不需要 就看你自己了

    示例代码:

    复制代码
    publicclass Movie
    {
    publicint ID { get; set; }

    [Required(ErrorMessage="必须输入标题")]
    publicstring Title { get; set; }

    [Required(ErrorMessage="必须输入发行日期")]
    public DateTime ReleaseDate { get; set; }

    [Required(ErrorMessage="必须制定种类")]
    publicstring Genre { get; set; }

    [Required(ErrorMessage="必须输入票价")]
    [Range(1,100,ErrorMessage="票价必须在 1 到 100 元之间")]
    publicdecimal Price { get; set; }

    [StringLength(5,ErrorMessage="最多允许输入5个字符")]
    publicstring Rating { get; set; }
    publicstring Description { get; set; }
    }
    复制代码

    2、ASP.NET MVC 3 在视图中如何创建HTML标签,(在视图中把含有标签的字符编译成相应的标签)

         在asp.net mvc 3 中的视图中字符串输出是默认按原字符串输出的,如果需要把字符串中的标签字符编译成相应的标签

         则需要在输出的时候创建标签:@MvcHtmlString.Create(ViewBag.RegionHTML); ViewBag.RegionHTML是包含标签的字符串

    3、ASP.NET MVC 3 中 报错:mvc 3 属性不能设置为“null”值。必须将该属性设置为类型为“Int32”的非 null 值。

         这是因为数据库中的表中的字段中有null值(如:int,double,datetime 等)

         这里只需要把数据库中相应数字类型的的字段的值中的null改掉就行了,比如把数字类型NULL值改成0,字符类型NULL值改成空格,日期类型NULL值改成日期

    4、数据库表需要加s

        ASP.NET MVC 3 中有个奇怪的现象,在使用EFCodeFirst后很多时候,数据库中的表需要加S,比如原来数据库表Product

       现在要变成Products,不然很多时候会报错:对象名 'dbo.Products' 无效

    5、ASP.NET MVC 3 中如何使用单选按钮 RadioButton

         这个比较简单,两种方式都行 @Html.RadioButton 或 @Html.RadioButtonFor    

         1、  @Html.RadioButton("Sex",true)男       2、 @Html.RadioButtonFor(model=>model.Sex,true)男
                @Html.RadioButton("Sex",false)女            @Html.RadioButtonFor(model=>model.Sex,false)女

         这里的sex就是实体属性,数据类型是bool类型,它会自动匹配数据库的值,相同的选中

    6、ASP.NET MVC 3 中如何引用js文件

         <script src="@Url.Content("~/Scripts/Calendar4.js")" type="text/javascript"></script>

         这里的Calendar4.js文件直接放在网站自动生成的Scripts文件夹中

    7、ASP.NET MVC 3 文本框自定义单击事件 onclick事件

        有两种方式

              1、直接写html标签,和平时一样<input type="text" id="Birthday" name="Birthday" onclick="MyCalendar.SetDate(this)" value="@Model.Birthday" />

           2、这样写:@Html.TextBox("Birthday", Model.Birthday, new { onclick = "MyCalendar.SetDate(this)",style="500px;" })

        数据交互上1和2没什么大的区别,但是如果你写了验证,1是不会引用错误样式,2会自动关联错误样式。

    8、ASP.NET MVC 3 使用下拉列表 DropDownList

       首先在控制器中需要得到一个SelectList控件放到上下文中(ViewData)

      控制器代码如下:           

    private CRMDBContext db = new CRMDBContext();
    var list = db.Partments.ToList();
    ViewData["partmentDDL"] = new SelectList(list, "Id", "PartName",employee.PartmentID);

      视图中:   

    1、 @Html.DropDownList("PartmentID", (SelectList)ViewData["partmentDDL"], "--this one--")
     
    2、 @Html.DropDownListFor(model => model.PartmentID, (SelectList)ViewData["partmentDDL"], "--this one--")

          这里的PartmentID是实体属性,如果ViewData中的SelectList中存在PartmentID值则自动选中该值。"--this one--"在下拉列表中添加一个选项,如果不需要添加,则填null

    9、ASP.NET MVC 3 具有键“XXX”的 ViewData 项属于类型“System.Int32”,但它必须属于类型“IEnumerable<SelectListItem>”。

      网上有人说是:错误主要原因是在提交处不认识原来的下拉列表(来自这里)他的解决方法是:在控制器中的接受处理的Action中重复构建DropDownList的代码,比如

    复制代码
    public ActionResult Create()
    {
    var actionList = db.Actions.ToList();
    ViewData["actionDDL"] = new SelectList(actionList, "Id", "GetMoActName");
    var popedomList = db.Popedoms.ToList();
    ViewData["pepedomDDL"] = new SelectList(popedomList, "Id", "Property");
    return View();
    }

    //
    // POST: /ActionPopedoms/Create

    [HttpPost]
    public ActionResult Create(ActionPopedoms actionpopedoms)
    {
    var actionList = db.Actions.ToList();
    ViewData["actionDDL"] = new SelectList(actionList, "Id", "GetMoActName");
    var popedomList = db.Popedoms.ToList();
    ViewData["pepedomDDL"] = new SelectList(popedomList, "Id", "Property");

    if (ModelState.IsValid)
    {
    db.ActinPopedoms.Add(actionpopedoms);
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    return View(actionpopedoms);
    }
    复制代码

     大家注意这两个方法,第一个action方法是展示新增页面用的,也就是说你再其他地方点击新增功能时,通过这个方法在转到视图,这个视图就是新增页面,在这里方法里构建了两个下拉列表,当我们点击相应按钮确定新增后,请求就被第二个action方法,这个方法传进来的是一个实体对象(这里为什么是一个实体对象就不具体说明),在这里方法里面就是执行相关新增的功能的,在这里新增成功后会转到action方法index方法中,如果新增失败则转到当前页面(这里代码 return view(actionpopedoms)就是新增的页面),问题就出在这里,如果第二个方法没有重新构建下拉列表的代码,则这里返回当前页面后,页面就不认识第一个action方法中构建的下拉列表,所以页面最终报错是 具有键“XXX”的 ViewData 项属于类型“System.Int32”,但它必须属于类型“IEnumerable<SelectListItem>”。所以只需要确定第二个action方法里的操作不会报错就行了。如果你需要看错误信息,你可以try一下,并return view(错误信息)

    10、ASP.NET MVC 3 在Razor view页面中如何导入命名空间呢

    @using MyNamespace

    11、ASP.NET MVC 3 中如何获得请求的Url路径 

    string url = "";//url全部分
    url = HttpContext.Current.Request.Url.ToString();

    12、ASP.NET MVC 3 中 tempdata、viewdata、viewbag三者区别

         TempData ViewData ViewBag都可以用来保存数据,它们之间的区别如下: TempData保存在Session中,Controller每次执行请求的时候,会从Session中先获取TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。ViewData生命 周期和View相同,仅对当前View有效。 ViewBag和ViewData生命周期相同,也是对但前View有效,不同的是ViewBag的类型不再是字典的键值对结构,而是dynamic动态类型,属MVC3里面新增的部分。-------来自

    13、ASP.NET MVC 3 中使用单选按钮Radiobutton

      这里为了应急所需,暂只介绍一种用法代码如下

      <div class="editor-field">
                @Html.RadioButton("Sex", Model.Sex, Model.Sex)
                男
                @Html.RadioButton("Sex", !Model.Sex, !Model.Sex)
                女
                @Html.ValidationMessageFor(model => model.Sex)
            </div>

    14、ASP.NET MVC 3 控制器中获取页面标签信息

           这个主要通过form表单获取页面提交的数据

          view代码:      

    复制代码
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Album</legend>
    
            @Html.HiddenFor(model => model.AlbumId)
    
            <div class="editor-label">
                @Html.LabelFor(model => model.GenreId)
            </div>
            <div class="editor-field">
                @Html.DropDownList("GenreId",string.Empty)
                @Html.ValidationMessageFor(model => model.GenreId)
            </div>
        </fieldset>
    }
    复制代码

     controller代码:

    album.AlbumId =Convert.ToInt32(Request.Form["AlbumId"]);
  • 相关阅读:
    xgboost保险赔偿预测
    XGBoost对波士顿房价进行预测
    XGBoost 重要参数(调参使用)
    xgboost与gdbt的不同和优化
    基于OpenCV制作道路车辆计数应用程序
    卷积神经网络cnn的实现
    记一次bond引起的网络故障
    虚拟化讲座
    ubuntu16安装dhcp server
    frp内网穿透新玩法--结合xshell隧道
  • 原文地址:https://www.cnblogs.com/Alex80/p/5417389.html
Copyright © 2011-2022 走看看