このようなページを機能させる方法に頭を悩ませようとして立ち往生しています。私のモデルには、さまざまな言語のテキスト フィールドを持つオブジェクトのリストが含まれています。ビューには、ドロップダウン リストで選択した言語に関連付けられたテキスト フィールドを表示するために動的に変更する必要がある場所があります。親フォームが送信されたときに、部分ビュー/モデルで編集された後、テキスト フィールドが親モデルに正しく保存されるように、テキスト フィールドも編集可能である必要があります。別のページで、部分ビューは私がやるべきことであるとほのめかされました。おそらく、リスト内の各言語の部分ビューをプログラムで生成し、ドロップダウンでの選択に基づいて正しい部分ビューを更新/レンダリングするために何かをすることについてですリスト...?
私の最初の試みでは、コントローラーへのajax呼び出しを使用して、ドロップダウンメニューの値に基づいて正しい部分ビューを返すようにしましたが、モデルにバインドできないため、更新/保存できませんメイン ビュー フォームが送信されます。これまで私が取り組んできたものは次のとおりです。
モデル:
public class EditModel
{
public List<TextField> TextFieldList;
public List<string> DisplayList
{
get
{
List<string> tempList = new List<string>();
foreach (TextField a in TextFieldList)
{
tempList.Add(a.Language.ToString() + "/" + a.Currency.ToString());
}
return tempList;
}
}
}
コントローラ:
public ActionResult EditTextFields(int adId, int index)
{
Ad ad = this.Repository.GetById(adId);
return PartialView("EditTextFields", ad.TextFieldsList[index]);
}
メイン ビュー:
@model Models.EditModel
<script type="text/javascript">
$(function () {
$(href('DisplayList').change(function () {
var value = $(this).find(':selected').val();
var adId = GetId();
$.get('/Controllers/EditTextFields', "{\"adId\": " + String(adId) + ", \"index\":\"" + value + "\"}", function (data) {
$('#TextFieldDiv').html(data);
});
}));
});
</script>
@using (Html.BeginForm("Edit", "Widget", FormMethod.Post, new { id = "WidgetEditForm", enctype = "multipart/form-data" }))
{
<div>
@Html.DisplayFor(m => m.DisplayList)
</div>
<div id="TextFieldDiv">
@{Html.RenderPartial("EditTextFields", (TextField)@Model.TextFieldList[0]);}
</div>
}
部分図:
@model Objects.TextField
@using (Html.BeginForm())
{
<table>
<tr>
<td class="fieldName" style="vertical-align: top;">
Headline Text:
</td>
<td>
@Html.EditorFor(m => m.Headline)
@Html.ValidationMessageFor(m => m.Headline)
</td>
</tr>
<tr>
<td class="fieldName">
Sub-Headline Text:
</td>
<td>
@Html.EditorFor(m => m.SubHeadline)
@Html.ValidationMessageFor(m => m.SubHeadline)
</td>
</tr>
</table>
}
私を良い方向に向けるアイデアはありますか?