1

私は以下のビューモデルを持っています

public class QuestionarrieAnswersViewModel
{
    public long QuestionID { get; set; }
    public string Question { get; set; }

    [Required(ErrorMessage="required")]
    [StringLength(255, ErrorMessage = "Maximum 255 characters are allowed.")]
    public string Answer { get; set; }
}

そして私は以下の方法でビューを生成しています

@model List<BusinessLayer.Models.ViewModel.QuestionarrieAnswersViewModel>

@using (Ajax.BeginForm("SaveQuestionarrie", "Member", FormMethod.Post, new AjaxOptions { OnBegin = "OnBegin", OnComplete = "OnComplete" }, new { @class = "form-horizontal" }))
{   
    for(int i=0;i<Model.Count;i++)
    {
     <div class="control-group">
        <div class="head_form">
            <label class="control-label">@Model[i].Question</label>
        <div class="controls">
            @Html.TextAreaFor(m=>m[i].Answer)
            @Html.ValidationMessageFor(m => m[i].Answer)
            @Html.HiddenFor(m=>m[i].QuestionID)         
        </div>
        </div>
    </div>
    }           
    <div class="control-group">
        <div class="controls">
            <button class="btn" type="submit">Save</button>                     
        </div>
    </div>
}

上記のモデルの回答フィールドにデータ注釈を設定しましたが、以下の方法でビューを生成すると機能しますが、上記のビューには適用されません

@model BusinessLayer.Models.ViewModel.QuestionarrieAnswersViewModel

@using (Ajax.BeginForm("SaveQuestionarrie", "Member", FormMethod.Post, new AjaxOptions { OnBegin = "OnBegin", OnComplete = "OnComplete" }, new { @class = "form-horizontal" }))
{   
    @Html.TextAreaFor(m => m.Answer)
    @Html.TextAreaFor(m => m.QuestionID)
    <div class="control-group">
        <div class="controls">
            <button class="btn" type="submit">Save</button>                     
        </div>
    </div>
}

ここで何が問題になっていますか...

4

3 に答える 3

1

これらの検証ルールを実行するには、のEditorFor代わりにを使用する必要がありますTextAreaFor

これは、の検証に未解決の問題があるためです。http: //aspnet.codeplex.com/workitem/8576TextAreaを参照してください。

于 2013-02-28T09:15:45.917 に答える
1

これは、ASP.NETMVC3でリリースされたjquery.validate.unobtrusive.jsのバージョンのバグが原因です。 この回答は同じバグに関するものです。これに対する解決策は、jquery.validate.unobtrusive.jsの最新バージョンにアップグレードすることです。MVC4プロジェクトから取得するか、NuGetを使用して更新します。

jquery.validate.unobtrusive.jsスクリプトにはバージョン番号がないようです。そのため、スクリプトでescapeAttributeValueという関数を検索すると、これはこのバグが修正されたバージョンのスクリプトです。

バグ修正で対処される問題は、jQueryセレクターでエスケープする必要のある文字を含む名前属性を持つ生成されたマークアップを処理する方法です。この場合

<textarea cols="20" name="[0].Answer" rows="2"></textarea>

このセレクターが必要です

$('[name=\\[0\\]\\.Answer]')
于 2013-02-28T09:46:19.507 に答える
0

クライアント側のDataAnnotation(検証)は、Html.TextAreaFor()ヘルパーでは機能しません。

これを機能させるには、「Answer」プロパティを[DataType(DataType.MultilineText)]属性で装飾する必要があります。また、ビューでは、Html.TextAreaFor()ヘルパーメソッドの代わりにHtml.EditorFor()ヘルパーを使用します。

同様のSO回答を参照してくださいasp.netmvcTextAreaForは必須フィールドとして検証されていません

于 2013-02-28T08:46:07.473 に答える