如何从窗体中获取部分数据

如何从窗体中获取部分数据

问题描述:

我有 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; } 
} 
+0

您需要发布从_ConsentVariablesGridView.cshtml – 2013-04-10 14:42:22

+0

标记,我只是将它加入 – 2013-04-10 14:48:00

我相信这是因为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 {}) 

原谅我,如果这失败(再次),我从臀部射击。

+0

它看起来懂事,让我来试试吧 – 2013-04-10 15:06:51

+0

不幸的是 - 它不是一个解决方案。我在“视图”中修复了字段命名,但在提交时TemplateViewModel.Variables仍为空 – 2013-04-10 15:20:25

+0

尝试更新后的for循环。在此之后,我会接受我的悲惨失败:) – 2013-04-10 15:22:49