将参数发送到操作方法

时间:2012-05-21 22:40:44

标签: c# asp.net asp.net-mvc-3 razor

目前我有这段代码:

@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>
}

这将发送给我:localhost:4470 /评论/添加?长度= 6 我真正想要的是这个网址:localhost:4470 / Review / Add?tekst = sdfsdf

如何修改此代码,它将使用“tekst”作为参数而不是长度?并且重视文本框的内容。

更新: 这是我的行动方法:

public ActionResult Create()
{
    return View();
}

public ActionResult Add(string tekst)
{
    ViewBag.test = tekst;
    return View();
}

在Create的View页面中,我想有一个带有文本框或textarea的表单,它向Add添加一个动作,textbox或textarea的内容应该在action方法的参数“tekst”中添加“

解: 参见CD史密斯的帖子

2 个答案:

答案 0 :(得分:1)

我不确定“长度= 6”的来源,因为我无法看到您的代码的哪一部分会创建该网址...

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

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

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

然后你应该把文本框的值正确地发布到你的控制器上。

答案 1 :(得分:1)

我不确定你的动作是什么样子,但只要它接受你的模型,你就可以在模型中获得TEKST的价值。

如果您需要不同的东西,那么您的View也需要不同,您从视图中发布模型,不通过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回到具有Create注释的[HttpPost]方法。然后,TEKST的值将作为参数发送到Add方法作为RedirectToAction并呈现Add视图