如何在ASP.NET C#/Razor中传递post窗体变量?

uqxowvwt  于 2022-12-05  发布在  .NET
关注(0)|答案(2)|浏览(180)

我是C#/Razor的新手,不知道如何使用post方法传递表单数据。以下是我的尝试:
在login.cshtml中:

string username = Request.Form["username"];
string password = Request.Form["password"];

还有

string username = Request.Form.Get("username");
string password = Request.Form.Get("password");

在_AppStart.cshtml中,我尝试过:

AppState["username"] = HttpContext.Current.Request.Form["username"];
AppState["password"] = HttpContext.Current.Request.Form["password"];

一切归虚无。
下面是login.cshtml中的表单元素:

<form action="index.cshtml" method="post" data-ajax="false">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Login</button>
</form>
avkwfej4

avkwfej41#

如果你需要在MVC控制器和视图之间传递数据,那么你必须让Asp知道控制器要调用哪个动作。
要实现这一点,您可以在razor中使用类似BeginForms的东西,并指定所需的信息。
这看起来像这样:

@Html.BeginForm("YourAction", "YourController", FormMethod.Post){ 
      @Html.TextBoxFor(employee => employee.FirstName);
      @Html.TextBoxFor(employee => employee.LastName);
      @Html.TextBoxFor(employee => employee.Age);
      <input type="submit" value="Edit" />
    }

在这个代码段之后,您可以看到您需要一个控制器,并且您根据这里给出的名称命名一个ActionResult,此外,您可以指定是否希望仅在发布时或仅在获取表单时执行该操作
一个可能的例子是像下面这样的编辑代码

[HttpPost]
    public ActionResult YourAction(Employee emp)
    {
        if (ModelState.IsValid)
        {
            // do smth.
        }

        return View("Name Of the view");
    }

请注意,您需要在控制器中定义此方法,而且HttpPost属性会让Asp知道这是一个仅发布的ActionResult。这意味着只有发布请求才能使用此方法。此外
如果您希望get和post请求都可用于此ActionResult,则您可以简单地删除该属性,然后默认情况下,它将在get和set请求中可用。
你可以看看这个论坛entry

bqf10yzr

bqf10yzr2#

在输入类型“submit add formaction=“操作方法名称”中

@using (Html.BeginForm("MethodName", "ControllerName", FormMethod.Post, new { enctype = "multipart/form-data" }))
   {
        <input type="file" name="postedFile"/>
        <input type="submit"  **formaction="UploadData"** value="UploadData"/>

   }

相关问题