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不需要刷新页面,这意味着您可以多次点击控制器而无需重新加载页面。