Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在窗体中创建对象数组,然后将该数组发送给控制器?_C#_Asp.net_.net_Asp.net Mvc - Fatal编程技术网

C# 如何在窗体中创建对象数组,然后将该数组发送给控制器?

C# 如何在窗体中创建对象数组,然后将该数组发送给控制器?,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,如何在表单中创建多个Step对象,并在单击“创建”按钮时将这些对象发送到控制器的POST方法 我不知道我用什么来显示我创建的Step对象数组,我想,它是以@Html助手的形式创建的,最终会在“create”上发送给控制器 此外,我还需要考虑编辑和删除下图所示的步骤 配方模型 public class Recipe { public int RecipeId { get; set; } [RequiredIfButtonClicked("

如何在表单中创建多个
Step
对象,并在单击“创建”按钮时将这些对象发送到控制器的POST方法

我不知道我用什么来显示我创建的Step对象数组,我想,它是以
@Html
助手的形式创建的,最终会在“create”上发送给控制器

此外,我还需要考虑编辑和删除下图所示的步骤

配方模型

    public class Recipe
    {
        public int RecipeId { get; set; }

        [RequiredIfButtonClicked("CreateRecipe")]
        [StringLength(50, ErrorMessage = "Title cannot be longer than 50 characters.")]
        [Display(Name = "Title:")]
        [RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$", ErrorMessage = "Must start with a capital letter, only alphabetic characters and no spaces allowed.")]
        public string Name { get; set; }

        // Used to create a single Step for a Recipe
        public Step Step { get; set; }

        // A Recipe has many steps
        public Step[] Steps { get; set; }
    }
    public class Step
    {
        public int StepId { get; set; }

        [RequiredIfButtonClicked("CreateRecipe", ErrorMessage = "At least one step is required.")]
        [StringLength(500, ErrorMessage = "Instructions cannot be longer than 500 characters.")]
        [Display(Name = "Step Instructions:")]
        public string Instruction { get; set; }

    }
步进模型

    public class Recipe
    {
        public int RecipeId { get; set; }

        [RequiredIfButtonClicked("CreateRecipe")]
        [StringLength(50, ErrorMessage = "Title cannot be longer than 50 characters.")]
        [Display(Name = "Title:")]
        [RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$", ErrorMessage = "Must start with a capital letter, only alphabetic characters and no spaces allowed.")]
        public string Name { get; set; }

        // Used to create a single Step for a Recipe
        public Step Step { get; set; }

        // A Recipe has many steps
        public Step[] Steps { get; set; }
    }
    public class Step
    {
        public int StepId { get; set; }

        [RequiredIfButtonClicked("CreateRecipe", ErrorMessage = "At least one step is required.")]
        [StringLength(500, ErrorMessage = "Instructions cannot be longer than 500 characters.")]
        [Display(Name = "Step Instructions:")]
        public string Instruction { get; set; }

    }

在您的情况下,我建议使用jQuery向控制器发送Ajax请求

我想您已经为
addstep
按钮定义了一些事件,以使用JavaScript收集数据

数据如下所示:

var steps=['step_1'、'step_2'];
在您的模型中,由于
步骤
类需要
指令
属性,因此可以使用该数组进行循环以创建新模型:

var模型={};
model.Steps=[];
对于(步骤的var步骤){
model.Steps.push({指令:step});
}
您还可以使用此模型添加更多属性,如
Name
Step
对象:

model.Name=$('.Title').val();
模型。步骤={
说明:步骤[0]
};
然后,在发送之前将数据压缩到
FormData

var data=new FormData();
data.append('Name',model.Name);
data.append('Step',model.Step);
data.append('Steps',model.Steps);
$.ajax({
url:“/your_controller”,
键入:“您的请求类型”,
数据:数据
}).完成(功能(响应){
log('来自服务器的响应数据:',响应);
}).失败(功能(错误){
//如果出现错误:找不到路径或请求格式无效。。。
//可以在此处记录错误
控制台错误(error);
});

当用户单击
添加步骤
按钮时,文本区域内的内容将被收集。然后,文本区域将被清理。当用户点击
Create
按钮时,所有数据都将发送到控制器。对吗?让用户输入一个数据用逗号分隔的字符串,在接受该字符串的控制器中,使用
.Split(“,”)
,这将把值保存到一个数组中。@T–n是的,但目前我只知道如何向控制器发送一个步骤,即文本区域内的数据。我不知道如何将每个步骤存储到一个数组中(单击“添加步骤”),然后将数组(以及所有步骤)发送到控制器。Re“…我用来显示什么…”:你的意思是“…我可以用来显示什么…”(更像问题)?请回答,而不是在这里的评论中(没有“编辑”,“更新:”或类似内容-问题应该像今天写的一样出现)。只是出于兴趣,是否可以在解决方案中发布类似Ajax的内容,同时发布没有Ajax的模型属性(使用@Html helpers)?如果我使用Ajax,那么控制器中使用Html.EditorFor的字段为空。@James Yes。如果你想设计一个小表单,比如:一些文本输入,一些文本区域,你并不需要ajax。但对于将来,如果您想向控制器发送一些文件,或者管理请求状态(成功、错误…),ajax可能会非常有用。另外,ajax不需要刷新页面,这意味着您可以多次点击控制器而无需重新加载页面。