将参数发送到操作方法

本文关键字:操作方法 参数 | 更新日期: 2023-09-27 18:34:48

目前我有这个代码:

@using (Html.BeginForm("Add", "Review", "Review"))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Review</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.TEKST)
        </div>
         <div class="editor-field">
            @Html.TextBoxFor(model => model.TEKST)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

这会把我发送到:本地主机:4470/审查/添加?长度=6我真正想要的是这个网址:localhost:4470/Review/Add?tekst=sdfsdf

如何修改此代码,使其使用"tekst"作为参数而不是长度?并作为文本框的内容的值。

更新:这是我的操作方法:

public ActionResult Create()
{
    return View();
}
public ActionResult Add(string tekst)
{
    ViewBag.test = tekst;
    return View();
}
在"创建"的"视图"页面中,我想要一个带有文本框或文本区域的表单,该表单将操作

发送到"添加",文本框或文本区域的内容应在操作方法"添加"的参数"tekst"中

溶液:参见 CD Smith 的帖子

将参数发送到操作方法

我不确定你的动作是什么样子的,但只要它接受你的模型,你的模型中就有 TEKST 的值。

如果你需要不同的东西,那么你的视图也需要不同,你从视图发布一个模型,你不会通过制作 POST 来发送 GET 参数

您是否有当前将 TEKST 作为参数的操作?

更新

好的,看看你的动作

......你不需要修改你的视图,你需要修改你的动作,试试这个,这会得到你想要的。

更改YourModelTypeHere以匹配您的真实模型类型

[HttpPost]
public ActionResult Create(YourModelTypeHere model)
{
    return RedirectToAction("Add", new { tekst = model.tekst });
}
public ActionResult Add(string tekst) 
{
    ViewBag.test = tekst;
    return View();
}

您只需稍微修改一下视图 - 从 BeginForm 标签中删除参数

@using (Html.BeginForm())

因此,Create操作将呈现Create视图,然后 POST 返回到具有[HttpPost]注释的Create方法。然后,TEKST的值将作为参数作为RedirectToAction发送到Add方法,并呈现Add视图

我不确定"Length=6"来自哪里,因为我看不出您的代码的哪一部分会创建该 URL......

在我看来,您期待一个 GET 请求,但(默认情况下(表单将导致 POST 请求。根据您的代码,我希望生成的路由是"localhost:4470/Review/Add"。无论表单的内容是什么,都将作为表单数据发送。

因此,在您的控制器中,如果您的操作方法如下所示:

[HttpPost]
[ActionName("Add")]
public ActionResult AddViaPost(string tekst)
{
    // do something with tekst
}

然后,您应该将文本框的值正确发布到控制器。