有没有模型的post数组形式的方法?

时间:2017-09-15 14:06:34

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4

这不是重复的线程。 我的情况是发送没有模型的数组参数。但是其他线程是发送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);
    }
}

4 个答案:

答案 0 :(得分:2)

有许多不同类型的Models。例如。 Database ModelsView ModelsDTOs等等。因此,在您的情况下,您从客户端收到的数据与数据库模型明显不同(顺便说一句,通常情况下也是如此) )。这意味着您应该创建特定于视图的模型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 PatternUnit 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获取此数据并反序列化 它