長い間 Web フォームを扱った後、ASP.net MVC を学ぼうとしているので、混乱している場合は申し訳ありません。モデルごとの単純な編集ページ構造を超えて移動するのに苦労しています。プロジェクトに外部参照されている従業員がいて、これをすべて 1 つのページで編集したいと考えています。
私は従業員モデルを持っています:
public class Employee
{
public string UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<ProjectXref> Projects { get; set; }
}
そして、これが私の ProjectXref モデルです。
public class ProjectXref
{
public Project Project { get; set; }
public string Role { get; set; }
}
ProjectXref のエディター テンプレートを作成しました。
@model Relationships.Models.ProjectXref
<tr>
<td><span class="h3"> @Model.Project.ProjectName </span> </td>
<td>@Html.EditorFor(model => model.Role)</td>
<td>
@Html.HiddenFor(model => model.Project.ProjectKey)
<a class="btnDel" > </a>
</td>
</tr>
...そして、Employee Edit ビューでは、EditorFor を使用して、従業員が関連付けられている各プロジェクトの tr 行をレンダリングします。
@Html.EditorFor(model => model.Projects)
私は今、これらをどうするかで立ち往生しています。ProjectXref を削除するために、いくつかの jQuery から始めました。
$(".btnDel").live("click", function () {
$(this).parents('tr').remove();
return false;
});
問題ないように見えますが、最初のプロジェクトを削除してから送信すると、次のプロジェクトが投稿に表示されません。私はそれが起こっている魔法の束縛に関係していると思います。私の「Projects_0__Title」フィールドが見つからないため、MVC は他のものをバインドしようとスキップします。
私の目標: プロジェクトのリストを自分のページで動的に変更したいと考えています。つまり、プロジェクトを削除したり、新しいプロジェクトを追加したり、プロジェクトを編集したり (プロジェクトに関連する従業員の役割を変更したり) したいと考えています。MVCにこれをさせようとするのは間違っていますか? 私が見たチュートリアルでは、ほとんどの場合、新しい ProjectXref をそれぞれ別のページで編集および追加する必要がありますが、それは UI が悪いように思えます。
私の考えでは、新しい ProjectXref エディター HTML をフォームに追加し、フォームが投稿されると、ASP.net がそれを新しい ProjectXref として認識し、バインドできるようになることを期待しています。同時に、既存の ProjectXref に関連付けられているフィールドを削除すると、ASP.net は ProjectXref の 1 つのフィールドが欠落していることを認識し、その ProjectXref を削除することを期待します。EditorTemplates で間違った道を進んでいますか?
編集:私の解決策
@Parv Sharma のおかげで、クラスに新しいプロパティを作成することになりました。
public string ProjectsJson
{
get { return JsonConvert.SerializeObject(Projects); }
set { Projects = JsonConvert.DeserializeObject<List<ProjectXref>>(value); }
}
次に、それを非表示としてビューに追加しました。
@Html.HiddenFor(model => model.ProjectsJson)
次に、AngularJS を使用して (とにかく学習する必要がありました)、フィールドから JSON を読み取り、それを UI に表示しました。