У меня есть представление, которое содержит выпадающий список и выбранный элемент выпадающего списка. Я загружаю частичный вид. И когда форма отправлена, я хочу иметь возможность получать оба значения из основного вида и частичного представления во время отправки формы. Вот основной видИзвлечение значений из частичного представления во время метода post
@model AdminPortal.Areas.Hardware.Models.CreateModule
@{
ViewBag.Title = "Create Module";
Layout = "~/Views/shared/_BootstrapLayout.basic.cshtml";
}
@Html.ValidationSummary(true)
<fieldset class="form-horizontal">
<legend>Add a Module <small>Create</small></legend>
@using (Html.BeginForm("CreateModule", "Module", new{id="AddModuleForm"}))
{
@Html.ValidationSummary(true)
<div class ="controls">
<div class="input-block-level">@Html.TextBoxFor(model => model.ModuleId, new {@placeholder = "ModuleID"})</div>
<br/>
<div class ="input-block-level" id="selectedModuleTypeName">@Html.DropDownListFor(model => model.SelectedModuleTypeName, Model.TypeNames,"Select Moduletype", new{id = "ModuleList"})</div>
<br/>
<div id="partialDiv"></div>
</div>
<div class="form-actions" id="buttons">
<button type="submit" class="btn btn-primary" id="Submit">Save changes</button>
@Html.ActionLink("Cancel", "ModuleList", null, new { @class = "btn " })
</div>
}
</fieldset>
<div>
@Html.ActionLink("Back to List", "ModuleList")
</div>
<script>
$("#buttons").hide();
$("#ModuleList").on("change", function() {
var modId = $(this).val();
$.get('@Url.Action("GetModulePropertyName", "Module")', { moduleTypeValue: modId }, function(result) {
$("#partialDiv").html(result);
});
//uncomment following section to check if the partial view is working properly
/*.done(function() { alert("done"); })
.fail(function() { alert("fail"); })
.always(function() { alert("completed"); });*/
});
$("#buttons").show();
</script>
и вот частичный вид на
@model IEnumerable<string>
@foreach(var names in Model)
{
<div class="input-block-level">@Html.TextBoxFor(m=>names, new{Value="", placeholder=names})</div>
<br/>
}
Вот моя модель
public class CreateModule
{
//Empty form to handle form serialization
public CreateModule()
{
}
[Required]
public string ModuleId { get; set; }
[DataType(DataType.DateTime)]
public DateTime DateEntered { get; set; }
[Required]
public string SelectedModuleTypeName { get; set; }
public IEnumerable<SelectListItem> TypeNames { get; set; }
public List<Property> Properties { get; set; }
}
public class Property
{
public string Name { get; set; }
public string Value { get; set; }
}
Вот метод, что сценарий в главном окне вперед к
[HttpGet]
public ActionResult GetModulePropertyName(string moduleTypeValue)
{
var moduleKindId = _repository.GetModuleKindId(moduleTypeValue);
var modulePropertyNames = _repository.GetModuleKindPropertyNames(moduleTypeValue);
return PartialView("GetModulePropertyName",modulePropertyNames);
}
и, наконец, здесь метод HttpPost для главного вида
[HttpPost]
public ActionResult CreateModule(CreateModule moduleV)
{
var module = new Module
{
ModuleTypeId = Convert.ToInt64(moduleV.SelectedModuleTypeName),
ModuleId = moduleV.ModuleId,
DateEntered = moduleV.DateEntered,
};
if (ModelState.IsValid)
{
_repository.AddModule(module);
Success("Module added successfully!");
return RedirectToAction("ModuleList", "Module", new {area = "Hardware"});
}
Error("Something went wrong!");
return RedirectToAction("CreateModule", "Module", new { area = "Hardware" });
}
Текущая ситуация: Когда форма Отправленные, свойства значение модели, которая передается через частичный вид, является нулевым. Я получаю другие значения, такие как typename, ID модуля.
Что бы я хотел: Я также хочу получить значение свойств, которое передается через частичный вид.
я все еще получаю пустое значение свойства :(Это то, что я сделал в контроллере для [HttpGet] 'общественного ActionResult GetModulePropertyName (строка moduleTypeValue) { вара температурных = _repository.GetModuleKindPropertyNames (moduleTypeValue); IList модели = Темп .Select (item => новое свойство {Name = item}). ToList(); возвращает PartialView («GetModulePropertyName», model); } 'и представление точно так, как вы уже упоминали. –
Cybercop
Не могли бы вы вставить имя 'из некоторых скрытых полей ввода, которые сгенерированы? –
Вы имеете в виду скрытые имена полей ввода, которые генерируются частичным представлением? – Cybercop