だから、基本的に私はこのようになりますビューモデルを持っている:私は、インデックスページに投稿するとき、私はインデックスページで、2つのシナリオでは、私のビューにそのモデルを渡す必要があり、コントローラに通常の方法を使用する必要がありますか?
public class KorisnikDugovanjaViewModel
{
public IEnumerable<Dug> Dugovanja { get; set; }
public IEnumerable<Korisnik> Korisnici { get; set; }
public Korisnik Korisnik { get; set; }
public decimal UkupnoDuznik { get; set; }
public decimal UkupnoVjerovnik { get; set; }
public IEnumerable<SumaPoDuzniku> SumePoDuzniku { get; set; }
public IEnumerable<SumaPoVjerovniku> SumePoVjerovniku { get; set; }
}
public class SumaPoDuzniku
{
public string Ime { get; set; }
public decimal Iznos { get; set; }
}
public class SumaPoVjerovniku
{
public string Ime { get; set; }
public decimal Iznos { get; set; }
}
、そうすべきです私は、そのモデルを私のインデックスmetodと私のhttp post indexメソッドの両方に入れています。あるいは、私はモデルを渡す必要があるときにこのように見えるメソッドを作るべきですか?
public KorisnikDugovanjaViewModel VratiModel()
{
int userId = int.Parse(Session["User"].ToString());
KorisnikDugovanjaViewModel model = new KorisnikDugovanjaViewModel
{
Dugovanja = dugRepository.Dugovanja
.Where(m => (m.Duznik.Id == userId || m.Vjerovnik.Id == userId)),
Korisnici = korisnikRepository.Korisnici,
Korisnik = korisnikRepository.Korisnici.FirstOrDefault(m => m.Id == userId),
UkupnoDuznik = dugRepository.Dugovanja
.Where(m => m.DuznikId == userId && !m.Zatvoreno).Sum(m => m.Iznos),
UkupnoVjerovnik = dugRepository.Dugovanja
.Where(m => m.VjerovnikId == userId && !m.Zatvoreno).Sum(m => m.Iznos),
SumePoDuzniku = dugRepository.Dugovanja
.Where(a => a.DuznikId == userId && !a.Zatvoreno)
.GroupBy(a => a.Vjerovnik.Ime)
.Select(a => new SumaPoDuzniku
{
Ime = a.Key,
Iznos = a.Sum(b => b.Iznos)
}),
SumePoVjerovniku = dugRepository.Dugovanja
.Where(a => a.VjerovnikId == userId && !a.Zatvoreno)
.GroupBy(a => a.Duznik.Ime)
.Select(a => new SumaPoVjerovniku
{
Ime = a.Key,
Iznos = a.Sum(b => b.Iznos)
})
};
return model;
}
通常は全く異なる方法で行われますか?コードを効率的に構造化する方法を学びたいだけです。 また、フォームをPOSTしたときにページが更新され、VratiModel()
メソッドで新しいモデルが読み込まれたビューが返されるはずですが、そうではありません。どういうわけか、モデルの状態を使うべきですか?私は無知だ。
ボーナスに関する質問:どのようにセッションを処理しますか?すべての方法の始めにユーザーがログインしているかどうかを確認する必要がありますか?それはコンストラクタで行うことができますか?コントローラのコンストラクタは実際にどのように機能しますか?あなたは私がuserId
をVratiModel()
メソッドの始めに使用していることに気づいたかもしれません。そして、他のすべてのメソッドでは、ちょっと悪いようです。
私は何とか私はそれを「私的」と宣言しなければならないことを完全に忘れていました。それはおそらく私を悩ませたものです。モデルの事では、モデルのバインディングは完全に機能しますが、シナリオは次のようなものです:私のビューページは私のデータベースのテーブルを表示します。ビューはフォームをいくつか更新できます。正常に更新されましたが、[更新]をクリックしない限り、ビューページに変更が反映されませんでした。また、ギャラクシーのガーディアンであなたを愛しました:D –
ポストモデル*、すなわち 'return view(model); 'でビュー*を返すようにしてください。 –
私はモデルのビューを次のように質問のメソッドから戻します。postメソッドがデータベースを更新した後の 'return View(VratiModel());'新しいビューを生成するはずですが、投稿を使用しないでリフレッシュして強制しない限り、表示されません。 'Return View(VratiModel());'のように、通常のアクションとポストアクションの両方に同じ行がありますが、ポストのものは、投稿前の状態のモデルを返します。 –