管理者が設定したトピックにユーザーが投票できる単純な Web アプリケーションを構築しています。各トピックには、2 つ以上のオプションを含めることができます。たとえば、「はい」または「いいえ」スタイルの投票トピックには、「ケンジントンで最高のレストランはどこですか?」という投票トピックとして 2 つのオプションがあります。多くのオプションを持つことができます。
これが私の現在のViewModelです:
public class NewTopicVM
{
[Required]
[Display(Name = "Topic Title")]
public string TopicTitle { get; set; }
[Required]
[Display(Name = "Topic Description")]
public string TopicDescription { get; set; }
[Display(Name = "Topic Image")]
public byte[] TopicImage { get; set; }
public List<NewOptionVM> TopicOptions { get; set; }
}
public class NewOptionVM
{
public string OptTitle { get; set; }
public string OptDescription { get; set; }
}
のリストに注意してNewOptionVM
くださいNewTopicVM
。Iko の回答に感謝します。動的に生成されていない入力をバインドできましたが、動的に生成された入力が何らかの理由でバインドされていません。
Option 入力フィールドを作成する jQuery コードは次のとおりです。
var index = 1;
function generateOptMarkup() {
var container = $('<div />');
var optionInputsBlock = $('<div />');
optionInputsBlock.addClass('optionInputsBlock');
var inputTitleBlock = $('<div />');
inputTitleBlock.addClass('inputBlock');
var inputDescBlock = $('<div />');
inputDescBlock.addClass('inputBlock');
var optTitleLbl = $('<label />');
optTitleLbl.attr('for', 'TopicOptions_' + ++index + '__OptTitle');
optTitleLbl.text('Option Title');
var optDescLbl = $('<label />');
optDescLbl.attr('for', 'TopicOptions_' + index + '__OptDescription');
optDescLbl.text('Option Description');
var optTitleInpt = $('<input type="text" />');
optTitleInpt.addClass('text-box single-line');
optTitleInpt.attr('name', 'TopicOptions_' + index + '__OptTitle');
optTitleInpt.attr('id', 'TopicOptions_' + index + '__OptTitle');
optTitleInpt.attr('data-val-required', 'The Option Title field is required.');
optTitleInpt.attr('data-val', 'true');
var optDescInpt = $('<input type="text" />');
optDescInpt.addClass('text-box single-line');
optDescInpt.attr('name', 'TopicOptions_' + index + '__OptDescription');
optDescInpt.attr('id', 'TopicOptions_' + index + '__OptDescription');
optDescInpt.attr('data-val-required', 'The Option Description field is required.');
optDescInpt.attr('data-val', 'true');
inputTitleBlock.append(optTitleLbl).append(optTitleInpt);
inputDescBlock.append(optDescLbl).append(optDescInpt);
optionInputsBlock.append(inputTitleBlock).append(inputDescBlock);
container.append(optionInputsBlock);
return container.html();
}
$('div.buttons > a').click(function () {
$('div.topicOptionsBlock').append(generateOptMarkup());
});
Index = 1
すでに 2 つのオプションが表示されているので、ここから始めます。スクリーンショットは次のとおりです。
最初の 2 つのボックスは正常に結合されますが、[オプションの追加] ボタンをクリックした後に動的に追加される 3 番目のボックスは結合されません!
私は何を間違っていますか?インデックス作成が正しいことを確認しましたが、機能していません:(