ASP.NET MVC5 Html.Beginform没有调用action方法

时间:2016-03-19 23:56:21

标签: c# asp.net-mvc razor

我的提交表单从我的剃刀文件到控制器,然后从控制器到我的远程数据库。但现在我甚至认为控制器类没有被调用。

以下是我的观点:

<form>
  <input type="text" name="firstName" value="The first name">
  <input type="text" name="lastName" value="The last name">
  <input type="email" name="emailAddress" value="email@example.com">
  <br>
  <input type="submit" value="Submit">
</form>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

用我的模特:

@model InputEvent

@using (Html.BeginForm("Save", "Portal/Controllers/MyEvent"))
{
    <md-input-container class="md-block" flex-gt-xs="">
        <label>Title</label>                    
        @Html.TextBoxFor(m => m.title)
    </md-input-container>

    <md-input-container class="md-block">
        <label>Address</label>                        
        @Html.TextBoxFor(m => m.address)
    </md-input-container>

    <md-button class="md-raised">
        <input type="submit" value="Save" />
    </md-button>
}

我的控制器与数据库连接:

public class InputEvent
{
    public string title;
    public string address;
}

我没有正确调用我的控制器吗?或者我的sql命令无效?

编辑:我刚刚在一小时后再次检查了我的数据库,我有多行,其中包含“test_title”和“test_address”。我想我的代码可以工作,但是它非常延迟。这可能不是最好的问题,但是有没有人知道为什么它会如此延迟插入数据库呢?

3 个答案:

答案 0 :(得分:0)

添加self.profile.videoconfavailability.wday == Date.today.wday && self.profile.videoconfavailability.time >= Time.now + (60*60) && Date.today.wday && self.profile.videoconfavailability.time > Time.now 作为第三个参数...您的操作方法是编写帖子而不是获取。

FormMethod.Post

答案 1 :(得分:0)

确保服务器端代码与下面的代码类似。请注意[HttpPost]属性。虽然客户端表单的默认值为Post,但HttpGet是服务器端的默认值。因此,您必须明确表示您希望在服务器端使用HttpPost。执行以下步骤。注意Save方法有两个重载,一个有HttpGet,另一个有HttpPost。完成后,使用HttpPost属性在方法上设置断点并发布表单。你会看到模型会被水化。

第1步

    @using (Html.BeginForm("Save", "MyEvent", FormMethod.Post))
    {
       <md-input-container class="md-block" flex-gt-xs="">
        <label>Title</label>                    
        @Html.TextBoxFor(m => m.title)
       </md-input-container>

      <md-input-container class="md-block">
        <label>Address</label>                        
        @Html.TextBoxFor(m => m.address)
      </md-input-container>

      <md-button class="md-raised">
        <input type="submit" value="Save" />
      </md-button>
   }

第2步

 public class MyEventController : Controller
 {

     [HttpPost]
     public ActionResult Save(InputEvent model)
     {     
         // Consider refining the implementation to use Stored Procedures or an ORM e.g. Entity Framework. 
         // It helps secure your app. Application security advice.    

         MySqlConnection conn = new MySqlConnection("mydbstring"); 
         conn.Open();                        

         MySql.Data.MySqlClient.MySqlCommand comm = conn.CreateCommand();
         comm.CommandText = "INSERT INTO event(title, address) VALUES(" + model.title + "," + model.address + ")";  
         comm.ExecuteNonQuery();

         conn.Close();    
         return View();
     }

     [HttpGet]
     public ActionResult Save()
     {                
         return View();
     }
 }

答案 2 :(得分:0)

我看到你的代码现在正在运行。但是,您不应该按照自己的方式从POST方法返回视图。您应该使用PRG模式。阅读该链接,以便了解代码可能导致的问题。我知道这是针对MVC 4的,但无论MVC的版本如何,模式都是一样的。