2016-09-29 5 views
0

エンティティモデルをhiddenviewのものと適切なフィールドのeditorforを使ってビューに渡しました。MVC httppostコントローラにモデルをロードして、別の属性をロードするように指定します。

フォームを送信すると、すべてのメンバーがコントローラーで正常に動作します。しかし、フィールドに追加するフィールドを追加するようにエンティティモデルを拡張しました。

 public string DescriptionAdd { 
     get { return ""; } 
     set { DescriptionHistory += DateTime.Now.ToString("dd MMM yyyy : hh:mm tt") + " by " + Core.Authorization.LoginUser.Current.FullName + " <span style='display:none;'>" + Core.Authorization.LoginUser.Current.EmailAddress + "</span> " + value + "<br />"; } 
    } 

さて、これまでのところすべてがうまく見えます。

しかし、私がsaveを押した場合、DescriptionHistoryはnullです。コントローラが実際にデバッガで停止すると、DescriptionHistoryは元の値になります。

これは間違った順序でロードしていると思うようになります。メンバーがどのような順序でバインドされているかを指定することは可能ですか?

+0

これは作成している非常に壊れやすいコードのようです。なぜこのようなことをしたいのですか?私はバインディングの順序が決定的だとは思わない、それはおそらくフォームに戻ってポストされた変数の順序に依存するか、おそらくxml/jsonで、もしあなたがajaxを使っているならば。 – Igor

+0

アイデアは破壊/変更できないノートの履歴を持つことです。にのみ追加されます。私はコントローラに明示的に値を追加することに決めました。 後で触れる人はコントローラに新しいデータを追加することを忘れることができず、その機能は構造体に継承されるという考えがあります。 私の質問は、この種の問題を避けるために注文を指定することが可能な場合です。 –

+0

ポストのコントローラのアクションメソッドでこれを明示的に行うのはなぜですか?モデルのメソッドまたはアクションの本文を使用していますか? – Igor

答えて

0

[OK]をクリックします。[OK]をクリックすると、いつでも保存が実行され、説明列の基になるテーブルにシステム駆動型の値とともに説明履歴が保存されます。

これは、あなたが

例元のエンティティクラスを拡張することによって、それを達成することができる方法である:あなたの元のエンティティが

public partial class Employee 
{ 
    public string Description 
    { 
     get; 
     set; 
    } 
} 

以下のように生成するためにあなたがすることができ、拡張し、いくつかの調整と注釈を付ける必要がありますあなたのニーズを達成してください

[MetaDataType(typeof(EmployeeMetaData))] 
public partial class Employee 
{ 
    [Column("Description")] 
    public string DescriptionAdd 
    { 
     set { } 
     get { return DateTime.Now.ToString("dd MMM yyyy : hh:mm tt") + " by " + Core.Authorization.LoginUser.Current.FullName + " <span style='display:none;'>" + Core.Authorization.LoginUser.Current.EmailAddress + "</span> " + value + "<br />"; } 
    } 
} 

public class EmployeeMetaData 
{ 
    [NotMapped] 
    public string Description 
    { 
     get; 
     set; 
    } 
} 

希望はあなたのニーズを満たしています。

関連する問題