ASP.. NET MVC在Html之前动态保存数据.BeginForm提交

本文关键字:保存 动态 数据 BeginForm 提交 NET MVC Html ASP | 更新日期: 2023-09-27 18:18:38

我相信这个问题之前已经有人回答过了,但是我想我的搜索词汇表把我甩了。在提交整个表单之前,我需要能够将数据添加到下面表单的元素中,特别是"Commands"、"Parameters"answers"Security"字段。

@using (Html.BeginForm("CreateTemplateStep", "TemplateStep"))
{
<div>
    @Html.LabelFor(model => model.Name)
    @Html.EditorFor(model => model.Name)
</div>
<div>
    @Html.LabelFor(model => model.ExecutionOrder)
    @Html.EditorFor(model => model.ExecutionOrder)
</div>
<div>
    @Html.LabelFor(model => model.Description)
    @Html.EditorFor(model => model.Description)
</div>
<div>
    @Html.LabelFor(model => model.Type)
    @Html.DropDownListFor(model => model.Type, Enum.GetNames(typeof(Helion.JobScheduler.Models.StepType)).Select(e => new SelectListItem { Text = e }))
</div>    
<div>
    @Html.LabelFor(model => model.Commands)
    @Html.EditorFor(model => model.Commands)         
</div>
<div>
    @Html.LabelFor(model => model.Parameters)
    @Html.EditorFor(model => model.Parameters)
</div>
<div>
    @Html.LabelFor(model => model.Security)
    @Html.EditorFor(model => model.Security)
</div>
<button type="submit" class="btn btn-default btn-primary">Save</button>
<input type="button" value="Cancel" onclick="location.href='@Url.Action("Template","Template")';" class="btn btn-default" />
}

所以我需要添加尽可能多的命令,因为我需要,然后当我点击提交表单上的命令的整个列表将被提交。如有任何帮助,不胜感激。

[DataModel("JOB", "TEMPLATE_STEP")]
public class TemplateStep
{
        public const string TABLE_NAME = "TEMPLATE_STEP";
        [PKIdentityDataColumn("TEMPLATE_STEP_ID")]
        public long? TemplateStepID { get; set; }
        [DataModelColumn("TEMPLATE_ID")]
        public long TemplateID { get; set; }
        [DataModelColumn("EXECUTION_ORDER")]
        public int ExecutionOrder { get; set; }
        [DataModelColumn("NAME")]
        public string Name { get; set; }
        [DataModelColumn("DESCRIPTION")]
        public string Description { get; set; }
        [DataModelColumn("TYPE")]
        public StepType Type { get; set; }
        [DataModelColumn("COMMAND_XML")]
        public string CommandXML { get; set; }
        [DataModelColumn("PARAMETER_XML")]
        public string ParameterXML { get; set; }
        [DataModelColumn("SECURITY_XML")]
        public string SecurityXML { get; set; }
        public List<NameValuePair> Commands { get; set; }
        public List<NameValuePair> Parameters { get; set; }
        public List<NameValuePair> Security { get; set; }        
}

这是关联的模型以及NameValuePair类。

public class NameValuePair
{
    public string Name { get; set; }
    public string Value { get; set; }
}

我们使用自定义的"KeyValuePair",因为我们无法让编辑器模板为实际的"KeyValuePair"结构工作。

ASP.. NET MVC在Html之前动态保存数据.BeginForm提交

感谢您的链接和建议@Stephen Muecke。我需要一些快速简单的方法,这样我的搭档才能继续他的工作。我所做的只是在视图中需要添加的每个字段上添加两个按钮。

<div>        
    @Html.LabelFor(model => model.Commands)
    @Html.EditorFor(model => model.Commands)
    <input type="submit" name="command" value="addCom" class="btn btn-default btn-primary" />              
</div>
<div>
    @Html.LabelFor(model => model.Parameters)
    @Html.EditorFor(model => model.Parameters)
    <input type="submit" name="command" value="addParam" class="btn btn-default btn-primary" />
</div>
<div>
    @Html.LabelFor(model => model.Security)
    @Html.EditorFor(model => model.Security)
    <input type="submit" name="command" value="addSec" class="btn btn-default btn-primary" />
</div>

然后在我的控制器函数中添加一些条件。

public ActionResult CreateTemplateStep(TemplateStep templateStep, string command)
    {
        if (command.Equals("addParam"))
        {
            templateStep.Parameters.Add(new NameValuePair());
            return View("CreateTemplateStep", templateStep);
        }
        else if (command.Equals("addCom"))
        {
            templateStep.Commands.Add(new NameValuePair());
            return View("CreateTemplateStep", templateStep);
        }
        else if (command.Equals("addSec"))
        {
            templateStep.Security.Add(new NameValuePair());
            return View("CreateTemplateStep", templateStep);
        }
        else if(command.Equals("saveStep")){ 
            Biz.SaveTemplateStep(templateStep);
            return RedirectToAction("EditTemplate", "Template", new {id = templateStep.TemplateID });
        }
        else
        {
            return View("CreateTemplateStep", templateStep);
        }
    }

就像我说的快速和肮脏,以保持球滚动。这种情况将在未来发生变化,变得更干净、更有活力。我会随着情况的变化而更新。如有任何进一步的建议或想法,我将不胜感激。