回答編集履歴
4
追記
answer
CHANGED
@@ -91,4 +91,26 @@
|
|
91
91
|
|
92
92
|
また、クライアント側の検証に限っても、EditorFor を使えば解決するというのは間違いで、1x というような文字を入力すると、 IE11 の場合は "The field ID must be a number." というエラーメッセージが出てしまいます(x1 というように最初の文字が数字でない場合は上に述べた通り。また、ブラウザ依存で、Chrome の場合数字以外は入力できないなど動作に違いがあります)。
|
93
93
|
|
94
|
-
結局、int 型のクライアント側での検証は、モデルのプロパティに RequiredAttribute と RegularExpressionAttribute を付与してせれにエラーメッセージを設定し、View では TextBoxFor を使うのが正解だと思います。(int? 型の場合は RequiredAttribute は不要)
|
94
|
+
結局、int 型のクライアント側での検証は、モデルのプロパティに RequiredAttribute と RegularExpressionAttribute を付与してせれにエラーメッセージを設定し、View では TextBoxFor を使うのが正解だと思います。(int? 型の場合は RequiredAttribute は不要)
|
95
|
+
|
96
|
+
**【2019/2/5 追記】**
|
97
|
+
|
98
|
+
解決策ですが、数字として不正な文字が混ざって POST される限り「The value '(入力値)' is not valid for 種別コード.」というエラーが出るのは避けようがないので、エラーメッセージを日本語化する他なさそうです。
|
99
|
+
|
100
|
+
System.Web.Mvc.resources.dll の日本語のサテライトアセンブリを追加し(NuGet で Microsoft.AspNet.Mvc.ja をインストールすれば良いはず)、web.config に以下の設定を追加すれば日本語表示になると思います。
|
101
|
+
|
102
|
+
```
|
103
|
+
<globalization uiCulture="auto" culture="auto" />
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
> MVC4でWEBサイトの開発をしています。
|
108
|
+
> デバッグ中は日本語で表示されていて、発行したサイトだと英語になってしまいます。
|
109
|
+
|
110
|
+
MVC4 ということですから Visual Studio のテンプレートでプロジェクトを作った際にサテライトアセンブリはインストール済みのはずです。(ちなみに MVC5 では自分で NuGet から Microsoft.AspNet.Mvc.ja をインストールしないと日本語のサテライトアセンブリは bin フォルダにインストールされません)
|
111
|
+
|
112
|
+
たぶん、上の web.config の設定がなかったので、システムのロケールに該当するカルチャがスレッドに設定され、開発マシンの OS は日本語だからデバッグ中は日本語表示に、「発行したサイト」の OS は英語だから英語表示になったのだと思います。
|
113
|
+
|
114
|
+
bin フォルダごと運用サーバーに発行していればサテライトアセンブリも含まれているはずなので、ブラウザの言語設定が日本語であれば、web.config の設定だけで日本語表示になると思います。
|
115
|
+
|
116
|
+
Culture, UICulture を "auto" に設定すると、ASP.NET は、ブラウザから送信されてくる要求ヘッダに含まれる Accept-Language の設定を調べて、その要求を処理するスレッドのカルチャを Accept-Language に設定されているカルチャに書き換えます。
|
3
追記&訂正
answer
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
**【2019/2/4 訂正】今さらながらですが、以下のレスに間違いがあったので訂正させてください。質問者さんが書かれた「The value '(入力値)' is not valid for 種別コード.」というエラーはサーバー側の検証で出るものです。なので、EditorFor を使えば解決というのも間違っていました。詳しくは下の【2019/2/4 追記】を見てください。**
|
2
|
+
|
3
|
+
---------------------------------------------
|
4
|
+
|
1
5
|
TextBoxFor ではなくて EditorFor を使ったらどうなりますか? **下の【追伸】参照。やはり、解決策は EditorFor を使うということのようです。**
|
2
6
|
|
3
7
|
自分の環境では、EditorFor を使うとテキストボックスは html ソースで input type="number" となります。data-val-number="The field 価格 must be a number." という属性も付与されますが、テキストボックスに数字以外を入力してもそのエラーメッセージが出てくることはないです。
|
@@ -69,4 +73,22 @@
|
|
69
73
|
</span>
|
70
74
|
</div>
|
71
75
|
</div>
|
72
|
-
```
|
76
|
+
```
|
77
|
+
|
78
|
+
--------------------------------------------
|
79
|
+
|
80
|
+
**【2019/2/4 追記】**
|
81
|
+
|
82
|
+
上のレスに間違いがあったので訂正させてください。
|
83
|
+
|
84
|
+
質問者さんが書かれた「The value '(入力値)' is not valid for 種別コード.」というエラーはサーバー側の検証で出るものでした。
|
85
|
+
|
86
|
+
View のコードに ```Html.EnableClientValidation(false);``` を追加するとクライアント側での検証に必要な属性(上の例で言うと data-val-number="The field 価格 must be a number.")は付与されなくなり、 クライアント側での検証は行われなくなります。
|
87
|
+
|
88
|
+
その場合、数字として不正な文字が混ざっていても POST されますのでサーバー側での検証が行われ、質問者さんが書かれた「The value '(入力値)' is not valid for 種別コード.」というエラーが出るということです。
|
89
|
+
|
90
|
+
これは EditorFor (type="number") でも TextBoxFor (type="text") でも同じで、数字として不正な文字が混ざって POST される限り避けようがないです。
|
91
|
+
|
92
|
+
また、クライアント側の検証に限っても、EditorFor を使えば解決するというのは間違いで、1x というような文字を入力すると、 IE11 の場合は "The field ID must be a number." というエラーメッセージが出てしまいます(x1 というように最初の文字が数字でない場合は上に述べた通り。また、ブラウザ依存で、Chrome の場合数字以外は入力できないなど動作に違いがあります)。
|
93
|
+
|
94
|
+
結局、int 型のクライアント側での検証は、モデルのプロパティに RequiredAttribute と RegularExpressionAttribute を付与してせれにエラーメッセージを設定し、View では TextBoxFor を使うのが正解だと思います。(int? 型の場合は RequiredAttribute は不要)
|
2
追記
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
TextBoxFor ではなくて EditorFor を使ったらどうなりますか? **下の【追伸】参照。やはり、解決策は EditorFor を使うということのようです。**
|
2
2
|
|
3
|
-
自分の環境では、EditorFor を使うとテキストボックスは html ソースで input type="number" となります。data-val-number="The field 価格 must be a number." という属性も付与されますが、テ
|
3
|
+
自分の環境では、EditorFor を使うとテキストボックスは html ソースで input type="number" となります。data-val-number="The field 価格 must be a number." という属性も付与されますが、テキストボックスに数字以外を入力してもそのエラーメッセージが出てくることはないです。
|
4
4
|
|
5
5
|
**Model のプロパティ**
|
6
6
|
|
@@ -40,8 +40,8 @@
|
|
40
40
|
</div>
|
41
41
|
```
|
42
42
|
|
43
|
-
**IE11 で検証**
|
43
|
+
**IE11 で検証**
|
44
|
-
(ブラウザ依存。Chrome では数字以外入力できない)
|
44
|
+
フォーカスを外すとクリアされる(テクストボックスは空白になる)。エラーメッセージは出ない。(注:ブラウザ依存。Chrome では数字以外入力できない)
|
45
45
|
|
46
46
|

|
47
47
|
|
1
追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
TextBoxFor ではなくて EditorFor を使ったらどうなりますか?
|
1
|
+
TextBoxFor ではなくて EditorFor を使ったらどうなりますか? **下の【追伸】参照。やはり、解決策は EditorFor を使うということのようです。**
|
2
2
|
|
3
3
|
自分の環境では、EditorFor を使うとテキストボックスは html ソースで input type="number" となります。data-val-number="The field 価格 must be a number." という属性も付与されますが、テクストボックスに数字以外を入力してもそれが出てくることはないです。
|
4
4
|
|
@@ -43,4 +43,30 @@
|
|
43
43
|
**IE11 で検証**
|
44
44
|
(ブラウザ依存。Chrome では数字以外入力できない)
|
45
45
|
|
46
|
-

|
46
|
+

|
47
|
+
|
48
|
+
**【追伸】**
|
49
|
+
|
50
|
+
上のサンプルの EditorFor を TextBoxFor に代えて試してみましたが、質問者さんの問題を再現できました。IE11 の場合ですが、数字以外を入力してフォーカスを外すと以下の通りとなります。ちなみに、EditorFor の場合は、フォーカスを外すと入力した文字はクリアされます(テクストボックスは空白になる)。
|
51
|
+
|
52
|
+

|
53
|
+
|
54
|
+
TextBoxFor に代えた場合いの html ソースは以下の通りです。
|
55
|
+
|
56
|
+
|
57
|
+
```
|
58
|
+
<div class="form-group">
|
59
|
+
<label class="control-label col-md-2" for="Price">価格</label>
|
60
|
+
<div class="col-md-10">
|
61
|
+
<input data-val="true"
|
62
|
+
data-val-number="The field 価格 must be a number."
|
63
|
+
data-val-range="価格は100~10000の間で入力してください。"
|
64
|
+
data-val-range-max="10000" data-val-range-min="100"
|
65
|
+
htmlAttributes="{ class = form-control }"
|
66
|
+
id="Price" name="Price" type="text" value="2980" />
|
67
|
+
<span class="field-validation-valid text-danger"
|
68
|
+
data-valmsg-for="Price" data-valmsg-replace="true">
|
69
|
+
</span>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
```
|