1

「作成」ビューに次のファイル入力タグがあります。

<input type="file" id="RequestFile" name="RequestFile"/>
@Html.ValidationMessage("RequestFile")

ViewModelには、次の対応するプロパティが含まれています。

[Required(ErrorMessage="Please select a file")]
public HttpPostedFileBase RequestFile { get; set; }

これは「作成」ビューでは正常に機能しますが、「編集」ビューではModelState.Isvalidがfalseになります。同じViewModelを使用して、ファイルを再度アップロードしたくないので、このフィールドを検証から除外したいと思います。

次のように入力タグを無効にしてみました。

<input type="file" id="RequestFile" name="RequestFile" disabled/>            

これには無効な入力制御がありますが、検証は引き続き実行されます。

また、コントローラーにBindAttributeを適用しても機能しませんでした(この質問を参照

理想的には(そうは思われないかもしれませんが)、これに対するサーバー側の解決策がある場合は、考えを投稿してください。クライアント側のちょっとしたトリックがあれば、教えてください!

4

2 に答える 2

2

最善の方法は、プロパティを完全に削除し、常にフォームコレクションから直接アクセスする(そして手動で検証する)か、プロパティ名を使用してモデル状態エラーを手動で削除することです(@cheesemacflyのコメントにありModelState.Remove("RequestFile")ます)。後者を使用すると、修正が非常に簡単になります。

于 2012-12-21T02:23:58.623 に答える
0

form.onsubmitを使用して、それを確認するためにdocument.getElementById( "RequestFile")。valueがnull /空ではなく、そうである場合は送信をキャンセルできます。

何かのようなもの

<form onsubmit="if(!document.getElementById('RequestFile').value){alert('Please select a file.');return false;}" >
<input type="file" id="RequestFile" name="RequestFile" />
<input type="submit"/>
</form>

falseを返すと、送信がキャンセルされます。

http://jsfiddle.net/Cg7HY/1/

または、送信ボタン自体のクリックイベントに入れます

http://jsfiddle.net/Cg7HY/3/

于 2012-12-21T02:26:00.210 に答える