您的位置:首页 > 其它

第一个MVC3做的企业空间项目总结(本人新手,如果有高手进,请多多指教,我不会不对的地方请指正)

2011-11-29 08:59 405 查看

这两天刚做完一个MVC3项目,因为以前项目经验就很少,之后MVC 0基础就直接做了这个MVC3的项目,所以中间出了很多问题,所以今天就写下第一篇博文总结一下MVC3出现的问题,以及在这个项目中发现的一些小窍门。

1.在做MVC3中做无刷新

方法执行是这样的,要通过一个参数获得一个另一个参数,通过另一个参数得到另一个对象

三层中用的ajax.dll是从前往后执行的,通过i获得val1 ,然后再通过val1获得val2,返回val2,条理很清淅

1 function getHtml(i){
2 var val1=Method1(i);
3 var val2=Method2(val1);
4 alert(val2);
5 }
MVC3中是用的是jq ajax 的post方法 这个是先执行post方法体,然后直接执行后面的alert("注意这里"),之后才执行post内部,把data得到赋给val1 然后,再去执行post内部的执行方法,再去执行post(第2个),把方法体执行完再alert(val2)

1 function getHtml(i){
2 $.post("url1",{"i":i}function(data){
3 var val1=data;
4 $.post("url2",{"val1":val1}function(data){
5 var val2=data;
6 alert(val2);
7 });
8 });
9 alert("注意这里");
10 }

刚开始跟着一个教程做了一个MVC的demo,里面使用了mvcModel数据验证,这个东西可以实现前后台统一验证,当时觉得非常不错,前台只要写cs代码就好啦,后台也只是写几个验证字段就可以啦。

首先说下用法吧。(以下代码引用 蓝博网络博客 )

1.引用命名空间System.ComponentModel.DataAnnotations

2.增加一些内建的Required(必须输入),StringLength(输入字符长度)与Range(输入范围)验证规则,如下代码

public class Movie

{

public int ID { get; set; }

[Required(ErrorMessage = "必须输入标题")]

public string Title { get; set; }

[Required(ErrorMessage = "必须输入发行日期")]

public DateTime ReleaseDate { get; set; }

[Required(ErrorMessage = "必须指定种类")]

public string Genre { get; set; }

[Required(ErrorMessage = "必须输入票价")]

[Range(1, 100, ErrorMessage = "票价必须在1元到100元之间")]

public decimal Price { get; set; }

[StringLength(5,ErrorMessage = "最多允许输入五个字符")]

public string Rating { get; set; }

}

页面只要把jq验证控件都引用进来,在每个需要验证的jq下面写个引用验证即可。

@model MvcMovie.Models.Movie

@{

ViewBag.Title = "追加电影信息";

}

<h2>追加电影信息</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"

type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"

type="text/javascript"></script>

@using (Html.BeginForm()) {

@Html.ValidationSummary(true)

<fieldset>

<legend>电影</legend>

<div class="editor-label">

标题

</div>

<div class="editor-field">

@Html.EditorFor(model => model.Title)

@Html.ValidationMessageFor(model => model.Title)

</div>

<div class="editor-label">

发行日期

</div>

<div class="editor-field">

@Html.EditorFor(model => model.ReleaseDate)

@Html.ValidationMessageFor(model => model.ReleaseDate)

</div>

<div class="editor-label">

种类

</div>

<div class="editor-field">

@Html.EditorFor(model => model.Genre)

@Html.ValidationMessageFor(model => model.Genre)

</div>

<div class="editor-label">

票价

</div>

<div class="editor-field">

@Html.EditorFor(model => model.Price)

@Html.ValidationMessageFor(model => model.Price)

</div>

<p>

<input type="submit" value="追加" />

</p>

</fieldset>

}

<div>

@Html.ActionLink("返回电影列表", "Index")

</div>
这样就可以实现前后台统验证啦,当用户在表单内输入不符合条件的数据,自动提示报错。

当时觉得很牛X,所以就准备用在自己的项目里,可是问题重重

第一,我们用的三层做的,用的aspx引擎,两个有区别啦,连最基本的引用都总搞不懂。

第二,三层的Model层和Mvc3的Models 我到底用哪个做Model,当时就有点蒙

第三,在做页面时教程上只有lable和txt两种,如果用txtArea等我就不知道咋办啦(没办法菜鸟嘛,不知道改哪)

第四, 因为做之前Demo的时候用的Efcodefirst(自动创建数据库),所以所有验证自动匹配到数据库里面啦,所以不能随便添入不完整的数据。()

第五,一个页面只能写一个Form不能重用,如果一个页面有多个表单数据我就不会实现啦

最重要的当时是在给公司做东西,不是自己闲着没事做,可以慢慢学,慢慢做,当时已经开始那个项目啦,真的没有太多时间去研究,所以就直接用最简单的方式 FormCollection collection collection["txtlianxiren"] 这样的方式一个个的取数据,如果遇到多个form则利用传参的形式判断form是哪个,当时想用ajax实现来着,可是和三层的却完全两样,不会实现啊。

刚刚又翻了翻别人的博客,看到一个关于前台后台统一验证的博文,分享大家(http://club.sm160.com/showtopic-924311.aspx

刚刚发现明白的小窃门,当然大家也许早已经知道啦,可是我刚知道,谁叫我是新手啦呢

1.在做可重复利用的小模块的时候可以在页面上拼写HTML代码拼接起来,在公用的Models建公用类输出String代码, 在页面上只要留着一个可以灌输的控件即可,比如div,span,等,因为以前总是不注意,所以经常复制粘贴代码到每个页面,最后才发现要改起来好麻烦,所以要学会把公用的东西封装起来。

2.在做显示的图片的时候直接把地址粘上就可以啦,如果找不到的就可以显示一张默认图片,用JS:onError="this.src='/Content/images/spaceimg/noneimg.jpg';" 这样就用不着在后台写xxxx=xxx:do():do2();这样的代码啦

3.

(上班啦,先写到这里,有时间继续写)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: