このプロジェクトに取り組んでいますが、私は再び立ち往生しています。横にメニューを表示する必要があるというビューがあります。メニューはテーブルから引き出されます。これと並行して、別のテーブルから引き出された質問があります。この中には、別のテーブルからまだ引き出された提案があります。質問には、いくつかの入力、ラジオ ボタン、フィードバック用のテキスト ボックスがあり、最終的に別のテーブルに表示されます。これはすべて、メイン テーブルの ID を使用して実行する必要があります。これにより、情報が結果テーブルに保存されるときに、それが属するメイン レコードもわかるようになります。ページは /Audit/302 で表示できますが、サブメニューを次の質問に変更すると、その質問を取得して ID を維持するにはどうすればよいですか。質問ごとに、その ID のエントリがあります。私は関係を築いてきました。
2011 年 8 月 2 日
Score というテーブルからチェックボックスのリストを取得する ViewModel を追加しました (OK、懸念、N/A)
私が持っているページは、AuditSchedules からレコードを取得し、いくつかの情報を取得する ID でレンダリングされます。レイアウトには、さまざまなセクションと MainQuestion (部分) を選択するアクションリンクのリストをレンダリングするサイド メニュー (部分) もあります。ここまで作業します。ビューモデルを追加してチェックボックスを設定し、AuditSchedule と MainQuestion の ID を使用してテキストをテーブルに保存したためです。私の問題は、スコアのテーブルから ID を選択するために ID を呼び出しており、AuditSchedule から ID を取得していることです。データが見つかりません。これが私のコントローラーです:
//get
public ActionResult _Forms(int score)
{
AuditFormEdit viewModel = new AuditFormEdit();
viewModel.ScoreInstance = _db.Scores.Single(r => r.ScoreID == score);
viewModel.InitializeScoreCheckBoxHelperList(_db.Scores.ToList());
return View(viewModel);
}
//post
[HttpPost]
public ActionResult _Forms(int score, AuditFormEdit viewModel)
{
if (ModelState.IsValid)
{
viewModel.PopulateCheckBoxsToScores();
_db.Entry(viewModel.ScoreInstance).State = System.Data.EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("/");
}
else
{
return View(viewModel);
}
}
ここに私のビューモデルがあります:
public class AuditFormEdit
{
public Models.Score ScoreInstance { get; set; }
public List<ScoreCardCheckBoxHelper> ScoreCardCheckBoxHelperList { get; set; }
public void InitializeScoreCheckBoxHelperList(List<Models.Score> ScoreList)
{
if (this.ScoreCardCheckBoxHelperList == null)
this.ScoreCardCheckBoxHelperList = new List<ScoreCardCheckBoxHelper>();
if (ScoreList != null
&& this.ScoreInstance != null)
{
this.ScoreCardCheckBoxHelperList.Clear();
ScoreCardCheckBoxHelper spacerProductCheckBoxHelper;
string spacerTypes =
string.IsNullOrEmpty(this.ScoreInstance.ScoreName) ?
string.Empty : this.ScoreInstance.ScoreName;
foreach (Models.Score scoreType in ScoreList)
{
spacerProductCheckBoxHelper = new ScoreCardCheckBoxHelper(scoreType);
if (spacerTypes.Contains(scoreType.ScoreName))
spacerProductCheckBoxHelper.Checked = true;
this.ScoreCardCheckBoxHelperList.Add(spacerProductCheckBoxHelper);
}
}
}
public void PopulateCheckBoxsToScores()
{
this.ScoreInstance.ScoreName = string.Empty;
var scoreType = this.ScoreCardCheckBoxHelperList.Where(x => x.Checked)
.Select<ScoreCardCheckBoxHelper, string>(x => x.ScoreName)
.AsEnumerable();
this.ScoreInstance.ScoreName = string.Join(", ", scoreType);
}
public class ScoreCardCheckBoxHelper : Models.Score
{
public bool Checked { get; set; }
public ScoreCardCheckBoxHelper() : base() { }
public ScoreCardCheckBoxHelper(Models.Score scoreCard)
{
this.ScoreID = scoreCard.ScoreID;
this.ScoreName = scoreCard.ScoreName;
}
}
}
ページをプルアップするリンクとコントローラーは次のとおりです。これはレイアウトの本文です。
public ActionResult Audit(int id)
{
var auditToDetail = _db.AuditSchedules.Single(r => r.AuditScheduleID == id);
return View(auditToDetail);
}
リンクは次のようになります。
/AuditSchedule/Audit/257
他に何か必要な場合はお知らせください。
私はコード ファーストのアプローチを使用しており、すべてのテーブルには関係が呼び出されたモデルがあります。
ありがとうございました