none
MVC4 ViewModel上加入驗證,要如何看得到 RRS feed

  • 問題

  • 您好:

    1.Models新增一個 類別(Index.cs),

    2.加入 IndexControll ,建置方案,加入public ActionResult Index()檢視,

      選用強行別--> 剛才的Index(Application.Models) -->產生 View\Index.cshtml

    3.於 ViewModel建立如下

    namespace MvcApplication1.Models
    {
        public class index  {
    
            [DisplayName("必選修")]
            public string required { get; set; }
    
            [Required(ErrorMessage = "學生姓名不得空白")]
            [StringLength(10,ErrorMessage="最多10個字")]
            public string name { get; set; }
    
    
        }
    }

    執行 http://localhost:2485/Index/Index

    卻看不到 ViewModel 的驗證畫面,請問該如何 查看得到 驗證畫面呢?

    謝謝!

    2015年7月22日 下午 01:03

解答

  • 我的作法你參考一下 先跟你抱歉 我一直以為你是用MVC5 ,你是用MVC4 其實大同小異。

    第一步 你把你的_Layout.cshtml 回到一開始專案產生的版本或是直接 因為我完全沒有動到Layout

    <!DOCTYPE html>
    <html lang="zh">
        <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <meta charset="utf-8" />
            <title>@ViewBag.Title - 我的 ASP.NET MVC 應用程式</title>
            <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
            <meta name="viewport" content="width=device-width" />
            @Styles.Render("~/Content/css")
            @Scripts.Render("~/bundles/modernizr")
        </head>
        <body>
            <header>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p class="site-title">@Html.ActionLink("您標誌的位置", "Index", "Home")</p>
                    </div>
                    <div class="float-right">
                        <section id="login">
                            @Html.Partial("_LoginPartial")
                        </section>
                        <nav>
                            <ul id="menu">
                                <li>@Html.ActionLink("首頁", "Index", "Home")</li>
                                <li>@Html.ActionLink("關於", "About", "Home")</li>
                                <li>@Html.ActionLink("連絡", "Contact", "Home")</li>
                            </ul>
                        </nav>
                    </div>
                </div>
            </header>
            <div id="body">
                @RenderSection("featured", required: false)
                <section class="content-wrapper main-content clear-fix">
                    @RenderBody()
                </section>
            </div>
            <footer>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 應用程式</p>
                    </div>
                </div>
            </footer>
    
            @Scripts.Render("~/bundles/jquery")
            @RenderSection("scripts", required: false)
        </body>
    </html>

    第二步 你在你的 Index 的Action右鍵新增 View (如果那張檢視已經存在先砍了)

    第三部 填寫你的View名稱,你要用 你自己創建的index (ViewModel),產生的View的範本為 Create,你的Layout選擇 _Layout.cshtml

    第四部 你的View產出來後 跑就可以了 因為他的 jqueryval 已經幫你產生在最下面。

    最後結果

    如果再不行 等待另外的高手回應吧!XDDD


    2015年7月26日 上午 02:12

所有回覆


  • 我剛剛試了一下 你應該是忘記 引用 jquery.validate

    你檢查你有沒有 jQuery.Validation,如果沒有 就用NuGet下載,之後引用在_Layout.cshtml裡 JQuery的下面。


    2015年7月22日 下午 01:44
  • 您好:

    我在 SCRIPTS \jquery.validate.js

    那這我還需要再哪邊 引用?

    View\Index.cshtml 嗎?

    using jquery.validate.js 嗎?

    謝謝!

    2015年7月24日 下午 12:53
  • 我也有

    jquery.validate.unobtrusive.js

    與 jquery-1.8.2.js  及 jquery-1.8.2.js

    2015年7月24日 下午 12:56

  • 2015年7月24日 下午 10:56
  • 您好:

    我 _Layout.cshtml 加入 js

    再 http://localhost:2485/Index/Index

    仍沒有看到 Models/index.cs 所設定的畫面 呈現出來

    還是 IndexController 有要設定關聯 Models/index.cs ?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        public class IndexController : Controller
        {
            //
            // GET: /Index/
    
            public ActionResult Index()
            {
                return View();
            }
    
        }
    }
    

    2015年7月25日 下午 12:26
  • 你把Index跟Layout的View貼出來!!
    2015年7月25日 下午 12:34
  • 您好:

    1.Controller\IndexController

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        public class IndexController : Controller
        {
            //
            // GET: /Index/
    
            public ActionResult Index()
            {
                return View();
            }
    
        }
    }
    

    2.Models\Index.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    
    namespace MvcApplication1.Models
    {
        public class index  {
    
            [DisplayName("必選修")]
            public string required { get; set; }
    
            [Required(ErrorMessage = "學生姓名不得空白")]
            [StringLength(10,ErrorMessage="最多10個字")]
            public string name { get; set; }
    
    
        }
    }

    3.Views\Index\Index.cshtml

    @model MvcApplication1.Models.index
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index  XX</h2>
    

    4.Views\Shared\_Layout.cshtml

    <!DOCTYPE html>
    <html lang="zh">
        <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <meta charset="utf-8" />
            <title>@ViewBag.Title - 我的 ASP.NET MVC 應用程式</title>
            <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
            <meta name="viewport" content="width=device-width" />
            @Styles.Render("~/Content/css")
            @Scripts.Render("~/bundles/modernizr")
            <script src="~/Scripts/jquery-1.8.2.js"></script>
            <script src="~/Scripts/jquery.validate.js"></script>
            <script src="~/Scripts/jquery.validate.unobtrusive"></script>
        </head>
        <body>
            <header>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p class="site-title">@Html.ActionLink("您標誌的位置", "Index", "Home")</p>
                    </div>
                    <div class="float-right">
                        <section id="login">
                            @Html.Partial("_LoginPartial")
                        </section>
                        <nav>
                            <ul id="menu">
                                <li>@Html.ActionLink("首頁", "Index", "Home")</li>
                                <li>@Html.ActionLink("關於", "About", "Home")</li>
                                <li>@Html.ActionLink("連絡", "Contact", "Home")</li>
                                  <li>@Html.ActionLink("留言板","Index","Message")</li> 
                            </ul>
                        </nav>
                    </div>
                </div>
            </header>
            <div id="body">
                @RenderSection("featured", required: false)
                <section class="content-wrapper main-content clear-fix">
                    @RenderBody()
                </section>
            </div>
            <footer>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 應用程式</p>
                    </div>
                </div>
            </footer>
    
            @Scripts.Render("~/bundles/jquery")
            @RenderSection("scripts", required: false)
        </body>
    </html>
    
    謝謝!




    2015年7月26日 上午 01:33
  • 我不太懂 你的Index.cshtml 根本沒有內容阿!?!?!?

    當然沒有東西啊!!

    2015年7月26日 上午 01:41
  • 我的作法你參考一下 先跟你抱歉 我一直以為你是用MVC5 ,你是用MVC4 其實大同小異。

    第一步 你把你的_Layout.cshtml 回到一開始專案產生的版本或是直接 因為我完全沒有動到Layout

    <!DOCTYPE html>
    <html lang="zh">
        <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <meta charset="utf-8" />
            <title>@ViewBag.Title - 我的 ASP.NET MVC 應用程式</title>
            <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
            <meta name="viewport" content="width=device-width" />
            @Styles.Render("~/Content/css")
            @Scripts.Render("~/bundles/modernizr")
        </head>
        <body>
            <header>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p class="site-title">@Html.ActionLink("您標誌的位置", "Index", "Home")</p>
                    </div>
                    <div class="float-right">
                        <section id="login">
                            @Html.Partial("_LoginPartial")
                        </section>
                        <nav>
                            <ul id="menu">
                                <li>@Html.ActionLink("首頁", "Index", "Home")</li>
                                <li>@Html.ActionLink("關於", "About", "Home")</li>
                                <li>@Html.ActionLink("連絡", "Contact", "Home")</li>
                            </ul>
                        </nav>
                    </div>
                </div>
            </header>
            <div id="body">
                @RenderSection("featured", required: false)
                <section class="content-wrapper main-content clear-fix">
                    @RenderBody()
                </section>
            </div>
            <footer>
                <div class="content-wrapper">
                    <div class="float-left">
                        <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 應用程式</p>
                    </div>
                </div>
            </footer>
    
            @Scripts.Render("~/bundles/jquery")
            @RenderSection("scripts", required: false)
        </body>
    </html>

    第二步 你在你的 Index 的Action右鍵新增 View (如果那張檢視已經存在先砍了)

    第三部 填寫你的View名稱,你要用 你自己創建的index (ViewModel),產生的View的範本為 Create,你的Layout選擇 _Layout.cshtml

    第四部 你的View產出來後 跑就可以了 因為他的 jqueryval 已經幫你產生在最下面。

    最後結果

    如果再不行 等待另外的高手回應吧!XDDD


    2015年7月26日 上午 02:12
  • 您好:

    感謝您,這樣可以了

    請問是

    第三部 填寫你的View名稱,你要用 你自己創建的index (ViewModel),產生的View的範本為 Create,你的Layout選擇 _Layout.cshtml

    中 建立 強型別 的問題嗎? 又好像是 樣板問題

    謝謝!


    2015年7月27日 下午 01:20