2

目前我有这个代码:

@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/Review/Add?Length=6 我真正想要的是这个 url: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 发送操作,文本框或 textarea 的内容应该在操作方法“Add”的参数“tekst”中

解决方案:参见 CD Smith 的帖子

4

2 回答 2

1

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

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

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

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

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

于 2012-05-21T23:04:51.263 回答
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方法作为 aRedirectToAction并渲染Add视图

于 2012-05-21T23:09:37.630 回答