現在、MVC 4 の学習に少し問題があり、誰かが助けてくれることを願っていました。私が知る限り、検索に表示されたこの質問と重複するものはありませんが、ある場合はその質問に誘導してください。
私の質問は次のとおりです。私が index.aspx ページに表示した学校のリストで、ユーザーが「詳細」リンクをクリックして、その特定の学校の詳細が表示されるようにすることは可能ですか? ? 以下のコードからの関連情報をすべて含めましたが、多すぎる場合はご容赦ください (何が必要か正確にはわかりませんでした)。
ご覧のとおり、ActionResult Index() はデータベース内のすべての学校のリストを返します。私がやりたいのは、彼らが「詳細」をクリックしたときにポストバックして、その学校に関する特定の情報を含むビューが返されるようにすることです。これは可能ですか?クリックされた学校の ID を渡すだけでよいと考えましたが、DAC レイヤーに戻ると、ID (int) をパラメーターとして受け入れています。タイプ「学校」のオブジェクト。これは理にかなっていますか?
価値のあることとして、私は Javascript を少し知っていますが、jQuery、JSON などは (まだ) 知りません。
だから私は5つの層を持っています:
- Index.aspx (ビュー)
- SchoolController (コントローラー)
- SchoolBus (ビジネス層)
- SchoolDAC (データベース アクセス クラス)
- SchoolVO (オブジェクトの表示)
私のビューオブジェクト:
SchoolVO.cs:
public int Id { get; set; }
public string Name { get; set; }
public string Slogan { get; set; }
私のデータベースアクセスクラス:
SchoolDAC.cs
public static School GetSchool(School school)
{
try
{
using (SqlConnection conn = ConnectionHelper.GetConnection("SchoolDB"))
{
SqlCommand cmd = new SqlCommand("Schools.GetSchool", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SchoolId", school.Id);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
school = readRecord(dr);
// readRecord() is just another method that fills the 3 properties of the school object with data from the database.
}
}
return school;
}
}
catch (Exception ex)
{
throw new Exception("Failed to get school", ex);
}
}
私の「ビジネス」層:
SchoolBus.cs:
public static School GetSchool(School school)
{
school = SchoolDAC.GetSchool(school);
return school;
}
私のコントローラー:
SchoolController.cs:
public ActionResult Index()
{
List<School> model = SchoolBus.GetAllSchools();
return View(model);
}
[HttpPost]
public ActionResult Index(School school)
{
School model = SchoolBus.GetSchool(school);
return View(model);
}
私の見解:
index.aspx:
<table>
<tr>
<th>
<%: Html.DisplayNameFor(model => model.Id) %>
</th>
<th>
<%: Html.DisplayNameFor(model => model.Name) %>
</th>
<th>
<%: Html.DisplayNameFor(model => model.Slogan) %>
</th>
<th></th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.DisplayFor(modelItem => item.Id) %>
</td>
<td>
<%: Html.DisplayFor(modelItem => item.Name) %>
</td>
<td>
<%: Html.DisplayFor(modelItem => item.Slogan) %>
</td>
<td> <!--- possible to pass an object through here? --->
<%: Html.ActionLink("Sign Up", "Index", new { id=item.Id }) %> |
<%: Html.ActionLink("Details", "Details", new { id=item.Id }) %> |
<%: Html.ActionLink("Delete", "Delete", new { id=item.Id }) %>
</td>
</tr>
<% } %>
</table>