这不是重复的线程。 我的情况是发送没有模型的数组参数。但是其他线程是发送int,字符串参数个体。
我知道如何使用模型对象发布到控制器 但有时我想在模型db之外发布数据并以格式对象或数组发布 我该怎么办?
查看
<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);
}
}
答案 0 :(得分:2)
有许多不同类型的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
(用于映射东西,如果你想要的话)。例如,查看模型到模型)等。
希望这会有所帮助。
答案 1 :(得分:1)
你好我会建议你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输入具有相同的名称,那么您将获得其值的字符串数组。
答案 2 :(得分:0)
这里最好的解决方案是使用模型。模型不必与数据库表相关。
/Filter /DCTDecode
可能是:
public ActionResult ShowData(Array data)
您可以将public ActionResult ShowData(YourModelNameHere data)
定义为:
YourModelNameHere
答案 3 :(得分:-4)
首先,您需要在表单上序列化数据并将数据序列化到隐藏字段中,并在发布后使用键从formcollection获取此数据并反序列化 它