2

ASP.NetMVC4アプリケーションであるWebサイトで控えめな検証を使用するHTMLフォームがあります。私の見解からのフォームは単純で、以下に示されています

@Using (Html.BeginForm())
{
  @: Listing for @ViewBag.itemNumber
  @Html.TextBoxFor(model=>model.Name)
  @Html.TextBoxFor(model=>model.Location)
  @:<input type="submit" value="Save" />
}

私のコントローラーは以下のとおりです

public ActionResult test()
{
  string itemNumber = Request.params["item"];
  ViewBag.itemNumber = itemNumber;
  return View();
}

私のモデルは

public class item
{
 [StringLength(10, ErrorMessage = "The Name should be atleast 3 characters in length", MinimumLength = 3)]
 public string Name {get;set;}
 public string Location {get;set;}
}

私が抱えている問題は、最初のフォームが送信される前であっても、ページが読み込まれるとすぐに目立たない検証が開始されることです。最小の長さの検証のため、入力を開始するとすぐに[名前]のテキストボックスが赤に変わります。同じWebサイトの他のページで、目立たない検証を正常に使用しましたが、この問題は発生しませんでした。URL GETパラメーターから値を取得してViewbagに設定するコントローラーのコードが原因で、この特定のページの早い段階で検証が開始されていると思われます。私の仮定は正しいですか?もしそうなら、どうすればこのページで検証が早すぎるのを防ぐことができますか?

編集:私は私のページに以下に指定されたのと同じ順序で次のjavascriptライブラリを持っています

<script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-ui-1.9.0.min.js" type="text/javascript"></script>
<script src="~/Scripts/jQuery.tmpl.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
4

2 に答える 2

4

あなたが説明したものがデフォルトの動作です!フィールドは、デフォルトでonKeyUpでも検証されます。これは、キーが上がっているときにテキストボックスが空ではなくなったという理由だけで、必須フィールドでは発生しません。したがって、必要なフィールドケースの動作と混同している可能性があります。とにかく、keyUp検証を無効にすることができます。変更できるプラグインの完全なオプションはこちらをご覧ください:http://docs.jquery.com/Plugins/Validation/validate#toptions

于 2012-10-26T00:55:50.930 に答える
0

レンダリングされたHTMLページ(つまり、ソースの表示)を表示できますか?

使用している.jsパックを確認することに興味があります。

たぶんあなたは古い/バギーjquery-1....jsパックを使用しています。jquery-1.6.2.jsバージョン(参考:最新バージョンは1.8.2)を使用してサンプルコードをテストしたところ、控えめなjsが期待どおりに機能しました。

問題の症状は確かにクライアント側の問題(JavaScript)のように聞こえるので、レンダリングされたWebページを表示できると役立つ場合があります。

ところで; コード例にはまだタイプミスがあります。コードViewは次のようになります。

@using(Html.BeginForm())
{
  @ViewBag.itemNumber
  @Html.TextBoxFor(model=>model.Name)
  @Html.TextBoxFor(model=>model.Location)
  <input type="submit" value="Save" />
}

更新 私はあなたが投稿したものに基づいてMVC4アプリを作成しました。これがレンダリングされたHTMLです。

私が含めたJavaScriptパックに注目してください。問題がjsパックの欠落が原因である可能性が非常に高いです。

   <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>test</title>
        <link href="/Content/site.css" rel="stylesheet" type="text/css" />
        <script src="/Scripts/jquery-1.6.2.js" type="text/javascript"></script>
        <script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
        <script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
    </head>
    <body>


    <h2>test</h2>
    <form action="/" method="post">
<input data-val="true" data-val-length="The Name should be at least 3 characters in length" data-val-length-max="10" data-val-length-min="3" id="Name" name="Name" type="text" value="" />
<input id="Location" name="Location" type="text" value="" />  
<input type="submit" value="Save" />
    </form>
    </body>
    </html>
于 2012-10-25T16:24:41.133 に答える