如何从窗体中获取部分数据
我有 ASP.NET MVC窗体弹出窗口中有一些控件和部分(数据网格)与他自己的模型。 这里弹出:如何从窗体中获取部分数据
<div id="AddEditDialog" class="none">
@using (Ajax.BeginForm("Save", "Templates", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "AddEditPlaceHolder",
OnSuccess = "OnSaveSuccess",
HttpMethod = "Post"
}))
{
<div>
<div id="AddEditPlaceHolder"></div>
<div id="PopupButtons" class="btn-holder-centered">
<input type="submit" value="Save" name="SaveButton" />
<input type="button" value="Cancel" name="SaveCancelButton" id="CancelEditHandler" />
</div>
</div>
}
</div>
这里是形式,我在AddEditPlaceHolder通过JS渲染:
@model TemplatesViewModel
<div class="form-field-plain overflow">
<div class="forRow narRow float-left">
@Html.LabelFor(x => x.Revocable)
@Html.CheckBoxFor(x => x.Revocable)
</div>
</div>
<div class="form-field-plain overflow">
<div class="forRow narRow float-left">
@Html.LabelFor(x => x.HtmlTemplate)
@Html.TextAreaFor(x => x.HtmlTemplate)
</div>
</div>
@Html.Partial("_VariablesGridView", Model.Variables)
_VariablesGridView.cshtml:
@model List<TemplateVariableViewModel>
<table id="TemplateVariablesGrid">
<thead>
<tr>
<td>Tag/Code</td>
<td>Prompt</td>
<td>Action</td>
</tr>
</thead>
<tbody>
@foreach (var i in Model)
{
<tr>
<td>
@Html.TextBox("txtTag", @i.Tag, new {})
</td>
<td>
@Html.TextBox("txtPrompt", @i.Prompt, new { })
</td>
<td>
@Html.HiddenFor(x => x.First(s => s.Id == @i.Id).Id)
<label class="delete-variable">delete</label>
</td>
</tr>
}
</tbody>
</table>
<br />
<input type="button" name="btnAddTemplateVariable" value="add new variable"/>
<br />
我的问题是:在 控制器“保存窗体'方法public ActionResult保存(TemplateViewModel模型)
我的模型包含所有数据f ROM形式,但TemplateViewModel.Variables是空的
有没有什么方法可以填充它呢?
型号:
public class TemplateViewModel
{
public int Id { get; set; }
public string HtmlTemplate { get; set; }
public List<TemplateVariableViewModel> Variables { get; set; }
}
public class TemplateVariableViewModel
{
public int Id { get; set; }
public string Tag { get; set; }
public string Prompt { get; set; }
}
我相信这是因为ASP.Net MVC结合不投入方面,这些领域,看看投放到浏览器的字段名称,什么是txtTag由前缀时它到达浏览器,什么是你是后执行下列操作:
@Html.Partial("_VariablesGridView", Model)
_VariablesGridView.cshtml:
@model TemplatesViewModel
...
@for (int i = 0; i < Model.Variables.Count; i++)
@Html.TextBox("txtTag", @Model.Variables[i].Tag, new {})
原谅我,如果这失败(再次),我从臀部射击。
它看起来懂事,让我来试试吧 – 2013-04-10 15:06:51
不幸的是 - 它不是一个解决方案。我在“视图”中修复了字段命名,但在提交时TemplateViewModel.Variables仍为空 – 2013-04-10 15:20:25
尝试更新后的for循环。在此之后,我会接受我的悲惨失败:) – 2013-04-10 15:22:49
您需要发布从_ConsentVariablesGridView.cshtml – 2013-04-10 14:42:22
标记,我只是将它加入 – 2013-04-10 14:48:00