有无模型的post数组形式的方法吗?
Are there method of post array form without model?
这不是重复的线程。
我的情况是发送没有模型的数组参数。但是其他线程发送的是int, string parameter individual.
我知道如何 post 使用模型对象进行控制器。
但有时我想 post 模型数据库之外的数据和格式对象或数组中的 post
我该怎么办?
查看
<form action="/home/showdata" method="post">
<input type="text" name="arr.username" />
<input type="text" name="arr.password" />
<input type="text" name="arr.email" />
</form>
控制器
public class HomeController : Controller
{
[HttpPost]
public ActionResult ShowData(Array data)
{
return Content(data.username + data.password + data.email);
}
}
此处最好的解决方案是使用模型。模型 不必与数据库 table.
相关
public ActionResult ShowData(Array data)
可能是:
public ActionResult ShowData(YourModelNameHere data)
您可以将 YourModelNameHere
定义为:
public class YourModelNameHere
{
public string username {get; set;}
public string password {get; set;}
public string email {get; set;}
}
有很多种Models
。例如。 Database Models
、View Models
、DTOs
等。因此,在您的情况下,您从客户端收到的数据与数据库模型有很大不同(顺便说一句,通常是这种情况).这意味着您应该创建一个特定于视图的模型,View Model
,然后在验证数据后,将该数据传输到数据库模型。例如:
public class SampleViewModel {
public int Id { get; set;}
public string Name { get; set; }
}
然后在你的控制器中:
public IHttpActionResult SampleActionMethod(SampleViewModel model) {
if (!ModelState.IsValid) {
return BadRequest();
}
var sampleDbModel = new SampleDatabaseModel() {
FullName = model.Name,
ProductId = model.Id,
// ... some other properties ...
};
// ... Save the sampleDbModel ...
return Ok(); // .. or Created ...
}
这个答案只是告诉你如何做你想做的事情。但理想情况下,您无论如何都不应该将数据库模型用作操作方法的参数。还有很多其他事情涉及,为此我建议您查看 Repository Pattern
、Unit Of Work
(用于管理数据库任务)和 Automapper
(用于映射内容,如果需要的话。例如,查看模型到模型)等。
希望这有帮助。
您好,我向您推荐 FormCollection
<form action="/home/showdata" method="post">
<input type="text" name="username" />
<input type="text" name="password" />
<input type="text" name="email" />
</form>
在控制器中你可以使用 FormCollection
public class HomeController : Controller
{
[HttpPost]
public ActionResult ShowData(FormCollection data)
{
string username=data.GetValues("username")[0];
string password=data.GetValues("password")[0];
string email=data.GetValues("email")[0];
return Content(username + password + email);
}
}
此外,如果某些 html 输入具有相同的名称,那么您将获得其值的字符串数组。
首先,您需要在表单上序列化数据并将序列化数据保存在隐藏字段中,然后 post 使用密钥从表单集合中获取此数据并反序列化
它。
这不是重复的线程。 我的情况是发送没有模型的数组参数。但是其他线程发送的是int, string parameter individual.
我知道如何 post 使用模型对象进行控制器。
但有时我想 post 模型数据库之外的数据和格式对象或数组中的 post
我该怎么办?
查看
<form action="/home/showdata" method="post">
<input type="text" name="arr.username" />
<input type="text" name="arr.password" />
<input type="text" name="arr.email" />
</form>
控制器
public class HomeController : Controller
{
[HttpPost]
public ActionResult ShowData(Array data)
{
return Content(data.username + data.password + data.email);
}
}
此处最好的解决方案是使用模型。模型 不必与数据库 table.
相关public ActionResult ShowData(Array data)
可能是:
public ActionResult ShowData(YourModelNameHere data)
您可以将 YourModelNameHere
定义为:
public class YourModelNameHere
{
public string username {get; set;}
public string password {get; set;}
public string email {get; set;}
}
有很多种Models
。例如。 Database Models
、View Models
、DTOs
等。因此,在您的情况下,您从客户端收到的数据与数据库模型有很大不同(顺便说一句,通常是这种情况).这意味着您应该创建一个特定于视图的模型,View Model
,然后在验证数据后,将该数据传输到数据库模型。例如:
public class SampleViewModel {
public int Id { get; set;}
public string Name { get; set; }
}
然后在你的控制器中:
public IHttpActionResult SampleActionMethod(SampleViewModel model) {
if (!ModelState.IsValid) {
return BadRequest();
}
var sampleDbModel = new SampleDatabaseModel() {
FullName = model.Name,
ProductId = model.Id,
// ... some other properties ...
};
// ... Save the sampleDbModel ...
return Ok(); // .. or Created ...
}
这个答案只是告诉你如何做你想做的事情。但理想情况下,您无论如何都不应该将数据库模型用作操作方法的参数。还有很多其他事情涉及,为此我建议您查看 Repository Pattern
、Unit Of Work
(用于管理数据库任务)和 Automapper
(用于映射内容,如果需要的话。例如,查看模型到模型)等。
希望这有帮助。
您好,我向您推荐 FormCollection
<form action="/home/showdata" method="post">
<input type="text" name="username" />
<input type="text" name="password" />
<input type="text" name="email" />
</form>
在控制器中你可以使用 FormCollection
public class HomeController : Controller
{
[HttpPost]
public ActionResult ShowData(FormCollection data)
{
string username=data.GetValues("username")[0];
string password=data.GetValues("password")[0];
string email=data.GetValues("email")[0];
return Content(username + password + email);
}
}
此外,如果某些 html 输入具有相同的名称,那么您将获得其值的字符串数组。
首先,您需要在表单上序列化数据并将序列化数据保存在隐藏字段中,然后 post 使用密钥从表单集合中获取此数据并反序列化 它。