单击按钮时更新和ASP.NET MVC模型

时间:2015-01-27 15:54:14

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

我是ASP.NET MVC的新手。我试图在按钮点击时更新模型但没有成功:每次按下按钮都会调用HttpGet控制器方法。

这是我的标记

@model DataInterface.Model.Entry

<button onclick="location.href='@Url.Action("Survey")'">Finish survey</button>

这是控制器代码

[HttpGet]
public ActionResult Survey()
{
    var entry = new Entry();
    return View(entry);
}

[HttpPost]
public ActionResult Survey(Entry newEntry)
{
       // save newEntry to database
}

当我点击按钮时,调用HttpGet方法。为什么呢?


成为一名新秀不好 谢谢大家!

3 个答案:

答案 0 :(得分:1)

如果您在未明确指定URL的情况下访问HTTP method,则ASP.NET MVC会假设GET请求。要更改此设置,您可以添加表单并发送:

@using (Html.BeginForm("Survey", "Controller", FormMethod.Post))
{
    <input type="submit" value="Finish survey" />    
}

如果您这样做,将调用您的POST方法。但是,Entry参数将为空,因为您未指定与请求一起发送的任何值。最简单的方法是指定输入字段,例如文本输入,下拉列表,复选框等。

@using (Html.BeginForm("Survey", "Controller", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.Title)
    <input type="submit" value="Finish survey" />    
}

如果您将对象存储在服务器上的某个位置并且只想通过将其写入数据库或更改其状态来完成它,则可以传递对象的Id(或一些临时Id) post请求并使控制器方法仅与Id:

一起工作
@using (Html.BeginForm("Survey", "Controller", FormMethod.Post))
{
    @Html.HiddenFor(m => m.Id)
    <input type="submit" value="Finish survey" />    
}

[HttpPost]
public ActionResult Survey(Entry newEntry)
{
    // newEntry.Id will be set here
}

答案 1 :(得分:0)

   @using (Html.BeginForm("Survey", "<ControllerName>", FormMethod.Post))
   {
       <input  type="submit" value="Finish survey" />    
   }

答案 2 :(得分:0)

您必须声明表格

@model DataInterface.Model.Entry
@using (Html.BeginForm("action", "Controlleur", FormMethod.Post, new {@class = "form", id = "RequestForm" }))
{
<input  type="submit" value="Finish survey" />
}