<system.web>

    <globalization culture ="en-US" />

    <!--elements removed for clarity-->

  </system.web>
  @Html.ActionLink("Edit", "Edit", new { id=item.BookID }) 

      再度,按F5运维应用程序,并在浏览器中浏览/Book网址,在页面中,使用鼠标左键单击“艾德it”链接。浏览器会自行导航到编辑页面,在页面中,单击鼠标右键,在弹出菜单中选择“查看源代码”,你会看到已经转移的HTML表单成分。如下。

 

 

 

处理POST请求 
       下边包车型大巴代码示例,显示了艾德it操作方法的HttpPost版本。

       
ASP.NET MVC Model Binder简单来讲就是控制器中的Action方法需求参数数据;而这一个参数数据蕴涵在HTTP请求中,包蕴表单上的Value和ULX570L中的参数等。通过Model Binder的效应将表单上的Value和U途睿欧L中的参数换来Book对象,然后将Book对象绑定到Action操作方法中的参数方面。个中ModelState.IsValid方法求证用户提交的表单中的数据是还是不是足以被用来修改(编辑或更新)贰个Book对象。假如数量是实惠的,Book数据将被封存到数据库的Book集合中(BookDBContext实例)。新的Book数据是由此调用BookDBContext的SaveChanges方法保存到数据库中。保存数据后,代码将用户重定向到BookController类的Index操作,同时在浏览器中突显最新的Book列表。 
       
若是提交过来的表单中的值是低效的,那么些值将再次呈现在浏览器的页面中。在艾德it.cshtml视图模板的Html.ValidationMessageFor帮手方法显示相应的失实新闻。如下图。

      
请注意,这些视图模板文件的顶部中有一句@model MvcApplication1.Models.Book,这一句代码的情趣是在文书中声称了对象的项目定义 ——即钦点了本视图中的对象类型是Book。 
       由VS自动生成的基架代码中接纳了多少个帮扶方法,那多少个帮扶方法用来压缩输入HTML标记。

 

          请留心,ASP.NET MVC 4.0 已经支撑jQuery的认证办法,在非阿尔巴尼亚语语言环境中使用逗号(“,”)代替小数点,你不能够不总结globalize.js和您自身所必要的特定语言的globalize.cultures.js文件(从https://github.com/ jQuery/ globalize 下载)和JavaScript中动用Globalize.parseFloat。上面包车型大巴代码展现了改动Views\Book\ 艾德it.cshtml文件中体现保加萨尔瓦多语(“fr-F途乐”):

<form action="/book/Edit/8" method="post">    <fieldset>

        <legend>Book</legend>


        <input data-val="true" data-val-number="字段 BookID 必须是一个数字。" data-val-required="BookID 字段是必需的。" id="BookID" 
        name="BookID" type="hidden" value="8" /> 

        <div class="editor-label">

            <label for="Category">Category</label>

        </div>

        <div class="editor-field">

            <input class="text-box single-line" id="Category" name="Category" type="text" value="SAP" />



        </div>

        <div class="editor-label">

            <label for="Name">Name</label>

        </div>
        <div class="editor-field">

            <input class="text-box single-line" id="Name" name="Name" type="text" value="SAP" />


        </div>

        <div class="editor-label">

            <label for="Numberofcopies">Numberofcopies</label>

        </div>
        <div class="editor-field">

            <input class="text-box single-line" data-val="true" data-val-number="字段 Numberofcopies 必须是一个数字。" 
         data-val-required="Numberofcopies 字段是必需的。" id="Numberofcopies" name="Numberofcopies" type="number" value="12" />



        </div>

        <div class="editor-label">

            <label for="AuthorID">AuthorID</label>

        </div>

        <div class="editor-field">

            <input class="text-box single-line" data-val="true" data-val-number="字段 AuthorID 必须是一个数字。" 
      data-val-required="AuthorID 字段是必需的。" id="AuthorID" name="AuthorID" type="number" value="12" />



        </div>

        <div class="editor-label">

            <label for="Price">Price</label>

        </div>

        <div class="editor-field">

            <input class="text-box single-line" data-val="true" data-val-number="字段 Price 必须是一个数字。" 
data-val-required="Price 字段是必需的。" id="Price" name="Price" type="text" value="1000000.00" />



        </div>

        <div class="editor-label">

            <label for="PublishDate">PublishDate</label>

        </div>

        <div class="editor-field">

            <input class="text-box single-line" data-val="true" data-val-date="字段 PublishDate 必须是日期。" 
     data-val-required="PublishDate 字段是必需的。" id="PublishDate" name="PublishDate" type="datetime" value="2013/1/1 0:00:00" />



        </div>
        <p>
            <input type="submit" value="Save" />
        </p>

    </fieldset>

</form>

   
第①个帮衬方法是:Html.LabelFor帮助方法用于浮现字段的名目(例如:“Name”,“PublishDate”,“Price”)。

      表明:全数的成立,编辑,删除或以其余办法修改数据的艺术都是经过HttpPost将数据传给相应控制器的照应措施。

public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");



    routes.MapRoute(

        name: "Default",

        url: "{controller}/{action}/{id}",

        defaults: new { controller = "Home", action = "Index", 

            id = UrlParameter.Optional }

    );

}
[HttpPost] 

        public ActionResult Edit(Book book)

        {

            if (ModelState.IsValid)

            {

                db.Entry(book).State = EntityState.Modified;

                db.SaveChanges();

                return RedirectToAction("Index");

            }

            return View(book);

        }

 

        
小数字段大概需求采取1个逗号,不是小数点。作为贰个暂且的化解办法,你能够在整个世界化的要素添加到品种的根目录下的Web.config文件中。上边包车型客车代码呈现了整个世界化设置为”en-US”。

 

      首先,在Visual Studio中运转一下上次的应用程序,通过浏览器访问http://localhost:36878/Book。将鼠标指针移到浏览器中的一个“Edit”链接上,就可以看到这个“Edit”指向的URL。如下图红框所示。

 

 

 

 

 图片 1

     

//

// GET: /Book/Edit/8


        public ActionResult Edit(int id = 0)
        {

            Book book = db.Books.Find(id);

            if (book == null)

            {

                return HttpNotFound();

            }

            return View(book);

        }

//

// POST: /Book/Edit/8


        [HttpPost]
        public ActionResult Edit(Book book)
        {

            if (ModelState.IsValid)

            {

                db.Entry(book).State = EntityState.Modified;

                db.SaveChanges();

                return RedirectToAction("Index");

            }

            return View(book);

        }

          您还是能够使用action方法前面带上查询参数。例如,UEnclaveL http://localhost:36878/Book/Edit?ID=8,通过ID=8,把参数ID的数量(8)传递给了Book控制器的“艾德it”方法。以上三种方式的履行结果如下图。

     
在上一小说中由Entity Framework(实体框架)去贯彻了对数据库的CUPRADOD操作。在本篇作品中,主纵然调剂修改自动生成的动作方法和视图,以及调节编辑功用与编写制定功用的Book控制器。

 

      个中最终三个<input>成分设置为Submit,用于提交HTML <form>中的表格数据到/Book/艾德it UPAJEROL。

     第②个援救方法是:Html.艾德itorFor帮忙方法用于自动生成一个HTML<input>成分。

@section Scripts {

    @Scripts.Render("~/bundles/jqueryval")

    <script src="~/Scripts/globalize.js"></script>

    <script src="~/Scripts/globalize.culture.fr-FR.js"></script>

    <script>

        $.validator.methods.number = function (value, element) {

            return this.optional(element) ||

                !isNaN(Globalize.parseFloat(value));

        }

        $(document).ready(function () {

            Globalize.culture('fr-FR');

        });

    </script>

    <script>

        jQuery.extend(jQuery.validator.methods, {    

            range: function (value, element, param) {        

                //Use the Globalization plugin to parse the value        

                var val = $.global.parseFloat(value);

                return this.optional(element) || (

                    val >= param[0] && val <= param[1]);

            }

        });

    </script>

}

         其次,大家打开BookController.cs文件,来精心看看当中的三个“艾德it”方法。代码如下所示。

               HTTPGET方法遵从类似的情势。他们获得2个图书(Book)对象(或是对象列表,在Index方法情状下) ,同时将对象数据传递给视图,由视图进行展现。
Create方法传递叁个空的书籍对象给Create视图。通过HTTP GET方式修改数据存在二个安全隐患。使用GET方法修改数据也背离了HTTP的极品实践和REST的架构形式,它钦命了GET请求不该变更你的应用程序的气象。换句话说,执行GET操作应该是三个安全的操作,没有其他副作用,不会修改你的持久化的数量。

 

 图片 2

 

 图片 3

      
如上航海用教室中所示,那些“HTML”对象是透过System.Web.Mvc.WebViewPage基类的属性暴表露来的。这一个ActionLink方法能够很不难地动态变化多少个链接,这么些链接指向控制器的2个动作方法。ActionLink方法的率先个参数是显得链接的文本音信(例如,“艾德it”)。第②个参数是指动作方法要调用控制器中的方法名称。最终三个参数是转变的路由数据(如示例中的ID=8)的二个匿名对象。 

   

图片 4

      请留意,第③个“艾德it”方法的上边有多少个“HttpPost”属性。那些天性钦点了此措施只可以由此POST请求来调用。也得以给第一个艺术方面加上“HTTPGET”属性,但那不是要求的,因为HTTPGET属性是私下认可的。 (Visual Studio将会给持有没有指明的法门,暗中认可且隐性的分配HTTPGET属性,那种隐性分配了“HTTPGET”属性的艺术称为HTTPGET操作方法。) 
       
第3个“HTTPGET”的“ 艾德it”方法是将图书的ID做为参数,使用Entity Framework查找方法找到钦定ID的书本,并赶回找到的图书数据给编写制定视图。 此方法中的ID参数被钦命了私下认可值,如若当调用时不带参数,则ID会选拔暗许值0。借使书籍记录没有找到,将会回来HttpNotFound。由基架系统成立的编辑视图通过<label>与<input>来展现Book类中的每种属性。示例代码如下。

   
第多个援助方法是:Html.ValidationMessageFor支持方法用于浮现与该属性关联的印证音讯。 

@model MvcApplication1.Models.Book 

@{

    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


@using (Html.BeginForm()) {

    @Html.ValidationSummary(true) 

    <fieldset>

        <legend>Book</legend> 

        @Html.HiddenFor(model => model.BookID) 

        <div class="editor-label">

            @Html.LabelFor(model => model.Category)

        </div>

        <div class="editor-field">

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

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

        </div> 

        <div class="editor-label">

            @Html.LabelFor(model => model.Name)

        </div>

        <div class="editor-field">

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

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

        </div> 

        <div class="editor-label">

            @Html.LabelFor(model => model.Numberofcopies)

        </div>

        <div class="editor-field">

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

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

        </div> 

        <div class="editor-label">

            @Html.LabelFor(model => model.AuthorID)

        </div>

        <div class="editor-field">

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

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

        </div> 

        <div class="editor-label">

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

        </div>

        <div class="editor-field">

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

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

        </div> 

        <div class="editor-label">

            @Html.LabelFor(model => model.PublishDate)

        </div>

        <div class="editor-field">

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

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

        </div>

        <p>
            <input type="submit" value="Save" />

        </p>

    </fieldset>

}

<div>

    @Html.ActionLink("Back to List", "Index")

</div>



@section Scripts {

    @Scripts.Render("~/bundles/jqueryval")

}

       “艾德it” 链接通过Html.ActionLink方法在浏览中生成指向Views\Book\艾德it.cshtml 视图的链接。代码如下。

       在上航海用体育场面中所示的变型的“艾德it”链接是http://localhost:36878/Book/Edit/8。默认路由URL模板是{controller}/{action}/{id}(模板代码位于App\_Start\\ RouteConfig.cs)。因而,浏览器会生出http://localhost:36878/Book/Edit/8
这些U翼虎L请求,同时传递参数ID=8给Asp.net MVC的Book控制器的“艾德it”方法。下边正是App_Start\ RouteConfig.cs里面包车型地铁路由模板设置。

相关文章

网站地图xml地图