Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC:当您单击;提交;按钮_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# MVC:当您单击;提交;按钮

C# MVC:当您单击;提交;按钮,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,MVC新手问题;我是通过玩耍而不是阅读手册来学习的……:) 当我创建“编辑”视图时,我看到自动生成的视图包含一个“提交”按钮: 但是在后台调用什么代码来执行此保存?具体地说,这个视图的基础模型在我想调用的代码中有自己独特的保存逻辑。我如何让视图调用我的代码,而不是在幕后不可见地调用任何标准代码?它将调用窗体操作在控制器上指向的任何公共操作方法。然后可以在视图模型上调用save public virtual ActionResult Save(MyViewModel model) {

MVC新手问题;我是通过玩耍而不是阅读手册来学习的……:)

当我创建“编辑”视图时,我看到自动生成的视图包含一个“提交”按钮:



但是在后台调用什么代码来执行此保存?具体地说,这个视图的基础模型在我想调用的代码中有自己独特的保存逻辑。我如何让视图调用我的代码,而不是在幕后不可见地调用任何标准代码?

它将调用窗体操作在控制器上指向的任何公共操作方法。然后可以在视图模型上调用save

    public virtual ActionResult Save(MyViewModel model) {
        model.Save();            

        --- more code to do stuff here
    }
将表单操作设置为
MyController/Save


您还可以在代码中使用
using(Html.BeginForm…
,将表单指向特定控制器上的特定操作方法。

它调用表单元素的操作部分中定义的操作方法 例如:



帐户控制器中的登录操作将在此表单中调用

ViewPage具有使用(Html.BeginForm()的BeginForm方法
在顶部,它将呈现FormTag。此方法有一个重载,它采用ActionName和controller Name。因此,您可以在控制器中指定必须调用的操作。

当您单击submit按钮时,请求将转到HTTp模块,该模块将其定向到相应的控制器操作。当从emplate表单的邮寄地址与编辑表单的邮寄地址相同,即如果您正在访问/主页/编辑,您可以在表单的开始标记中看到以下html

<form method="post" action="/home/edit">

HttpPost属性告诉我们,它将只处理post请求,而不是用于呈现表单的get requested。

定义发生了什么的按钮不是按钮,而是表单本身。submit类型的按钮(每个表单一个)只是触发表单提交,表单提交由表单本身处理

表单有一个动作-例如:

<form name="input" action="users/save" method="post">
    <!-- Form content goes here -->
    <input type="submit" value="Submit" />
</form>

该操作是一个URL,浏览器收集表单(
)中所有字段的值,并将它们发布到指定的URL

在ASP.NET MVC中,通常使用Html帮助程序定义表单,以便将构建表单操作的URL委托给ASP.NET MVC。例如,对于上述内容:

<% using(Html.BeginForm("Save", "Users")) %>
<% { %>
    <!-- Form content goes here -->
    <input type="submit" value="Save" />
<% } %>


在本例中,它将创建一个url
/users/save
,表单将发布到该url。这将触发ASP.NET路由,该路由将处理
/users/save
url,并将其分块,以便它知道必须调用“users”上的“save”操作方法控制器类。然后,它将读取所有传入的字段名-值对,并尝试将它们映射到方法参数名(如果有)。

不正确,它将调用当前正在查看的同一方法的post操作。@Jimmy:谢谢更正。如果没有为调用视图的方法指定post操作,将执行什么操作被调用?如果您在表单上执行操作
登录
,默认情况下,它将发布到相同的操作,因此它将发布到操作
登录
,我相信它在创建表单时会根据您当前的路径执行此操作谢谢…我尝试了,调用了相同的方法,而不是索引()。谢谢。阅读手册会更快:)nerddinner教程非常适合使用mvc。如果Html.BeginForm()没有参数怎么办?默认行为是什么?当前控制器和索引??是。没有参数的BeginForm会向当前URL发送HTTP POST。请参阅:
[HttpPost]
public ActionResult Edit(int id, ViewModel model)
{
      //put your logic here handling submitted values
}
<form name="input" action="users/save" method="post">
    <!-- Form content goes here -->
    <input type="submit" value="Submit" />
</form>
<% using(Html.BeginForm("Save", "Users")) %>
<% { %>
    <!-- Form content goes here -->
    <input type="submit" value="Save" />
<% } %>