Im разрабатывает приложение mvc5. В представлении я динамически генерирую html-элементы (текстовые поля и dropdownlists), используя возвращаемый результат json и jquery. Теперь я хочу опубликовать выбранные идентификаторы данных из ddls и ввести тексты в текстовые поля на сервер. И id, и тексты сохраняются в базе данных в формате nvarchar. Количество динамически генерируемых ddls и текстовых полей изменяется в зависимости от результата json.Публикация данных, связанных с динамически создаваемыми элементами html mvc5
Это результат JSON
var x = db.ItemTemplates.Where(a => a.MainGroupId == mnId).Where(a => a.SubGruopId == sbId).FirstOrDefault();
var ids = new List<int> { x.Atribute1, x.Atribute2, x.Atribute3, x.Atribute4 };
var y = db.Atributes.Where(a => ids.Contains(a.AtributeId)).Select(g => new
{
Name = g.AtributeName,
Options = g.atributeDetails.Where(w=>w.AtributeDetailId!=null).Select(z => new
{
Value=z.AtributeDetailId,
Text=z.AtDetailVal
})
});
Посмотреть кратко
@using (@Html.BeginForm("Save", "Item"))
{
@Html.DropDownListFor(a => a.MainGrpId, new SelectList(ViewBag.mnGrpList, "MainGroupId", "MainGroupName"), " Select a MainGroup", new { Class = "form- control", title = "", style = "width:175px;height:30px; margin-top:6px;" })
@Html.DropDownListFor(a => a.SubGrpId, new SelectList(ViewBag.sbGrpList, "SubGroupId", "SubGroupName"), " Select a SubGroup", new { Class = "form-control", title = "", style = "width:175px;height:30px; margin-top:6px;" })
<div id="ss" class="col-md-6">
</div>
<input type="submit" value="Save" class="btn btn-success" />
}
Jquery
var ss = $('#ss');
$('#SubGrpId').change(function() {
$('#ss').empty();
$.ajax({
url: '@Url.Action("FillItem", "Item")', // dont hard code your url's
type: "GET",
dataType: "JSON",
data: { MnId: $('#MainGrpId').val(), SbId: $(this).val() }, // pass the selected value
success: function (y) {
$.each(y, function (l, u) {
// add the label
var name = u.Name;
var label = $('<label></label>').text(name).attr('for', name);
ss.append(label);
if (u.Options.length==0) {
// There is only one item and its for generating a textbox
var input = $('<input>').attr({ type: 'text', id: name, name: name });
ss.append(input);
} else {
// Its a select
var select = $('<select></select>').attr({ id: name, name: name });
// add each option
$.each(u.Options, function (i, option) {
select.append($('<option></option>').val(option.Value).text(option.Text));
})
ss.append(select);
}
});
},
error: function() {
alert("something wrong");
}
});
});
ItemModel (6 Свойства типа строка для DDL, выбраны и текстовое поле ое и введенные значения, только несколько полей из этих 6 будут использоваться при сохранении, последовательность не имеет значения)
public class Item
{
[Key]
public int ItemId { get; set; }
public string ItemName { get; set; }
public int MainGrpId { get; set; }
public int SubGrpId { get; set; }
public string Field01 { get; set; }
public string Field02 { get; set; }
public string Field03 { get; set; }
public string Field04 { get; set; }
public string Field05 { get; set; }
public string Field06 { get; set; }
}
ViewModel (неполный)
public class ItemViewModel
{
public int MainGrpId { get; set; }
public int SubGrpId { get; set; }
}
Может кто-нибудь, пожалуйста, руководство меня о том, как организовать ViewModel для захвата динамических элементов html и того, как выполнять функции сохранения.
Кто этот парень Джейсона? – developerbmw
Вы слышали о Partial Views? –
@ Arijit Mukherjee, Да, я тоже использую его. Но для этого сценария я его не использовал. Я должен использовать его здесь? – Isuru