2010-11-19 11 views
0

私の脱毛は、はるかに急速に成長しています。私は最初に数日前にthis questionを投稿しました。私は今問題を知り、それを働かせています。もう一つの問題が浮上しています。フォームアクション投稿null

上記の問題を解決するために、requestedDays[{0}].DateOfLeaveの名前を手動で作成しました。{0}Guidでした。これにより、私のコントローラはList <>値を正しく受け取ることができました。

this article's methodを使用すると、生成された名前は、DayRequested.DateOfLeaveのクラスを持つため、コントローラが正しく受信しないrequestedDays[{0}].DayRequested.DateOfLeaveです。

[Authorize, HttpPost] 
    public ActionResult Create(LeaveRequest leaveRequest, List<DayRequested> requestedDays) 
    { 
    } 

私は手作業で回避策を見つけようとしましたが、これまでに試したことはありません。 You can see my validation method here。私はsecond part of Sanderson's article on validationについて知っていますが、メソッドに渡されていないものを検証することは非常に難しいです。

これは私の部分的なビューで使用している私のViewModelです。

public class LeaveRequestRow 
{ 
    public LeaveRequestRow(DayRequested dayRequested, List<SelectListItem> leaveRequestType) 
    { 
     this.DayRequested = dayRequested; 
     this.LeaveRequestType = leaveRequestType; 
    } 

    public List<SelectListItem> LeaveRequestType { set; get; } 
    public DayRequested DayRequested { set; get; } 
} 

今後の進め方についてご意見はありますか?ドロップダウンをjQueryビルドコントロールに変換して、ViewModelの使用を停止する必要がありますか?

+0

あなたがリンクしている記事のコードがバグかもしれないと思っています。 –

答えて

0

私はこれを解決しましたが、私が望んでいたほどエレガントではありませんでした。 TextBoxForをすべてTextBoxに変更し、これを行うのに必要な追加の変更を加えました。名前は正しく生成され、私は上に移動することができます。これにより、フィールドの隣に確認メッセージが表示されるようになりましたが、ValidationSummaryはまだ動作します。私は後でそれをコードサンプルと私のウェブサイト上のソリューションを修正する作業をしています。

0

複合型の1-Nコントローラの引数をバインドするのは難しいことです。

あなたのコード例は、私の揚げられた金曜日の金曜日の脳と噛み合っていませんが、私はそれを撃つでしょう。 LeaveRequestクラスを想定し

は次のようになります。

public class LeaveRequest { 
    public string Text { get; set; } 
    public string Number { get; set; } 
} 

投稿フォームキーがなければなりません。簡単な部分である

leaveRequest.Text 
leaveRequset.Number 

。 DayRequestedのリストの1-Nバインディングはちょっと変わってきます。

public class DayRequested { 
    public string Words { get; set; } 
    public string Data { get; set; } 
} 

あなたの投稿フォームのキーは次のようになります:

requestedDays[0].Data 
requestedDays[0].Words 
requestedDays[1].Data  
requestedDays[1].Words 
requestedDays[2].Data  
requestedDays[2].Words 
requestedDays[3].Data  
requestedDays[3].Words 

デフォルトMVCのバインダーは、あなたの2つのメソッドの引数にすべての10個のフォームの値をTRUN必要があります... POCO DayRequestedオブジェクトは次のようになりますと言いますPOCOのリスト。

+0

私は混乱しています。投稿されたキーは 'requestedDays [x] .Class.Field'です。手動で名前を変更することなく、 'requestedDays [x] .Field'に変更したいと思います。 –