使用ViewBag,文本框的值不会改变

时间:2015-09-11 22:01:02

标签: asp.net asp.net-mvc asp.net-mvc-4 viewbag

我写了一个简短的程序,但我没有得到预期的结果。考虑这个视图,它只是一个带有两个文本框和一个提交按钮的表单:

@{ ViewBag.Title = "Index"; }
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.TextBox("Box1", (string)ViewBag.TextBox1)
    @Html.TextBox("Box2", (string)ViewBag.TextBox2)
    <input type="submit" value="Search" />
}

这是我的控制人员:

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

[HttpPost]
public ActionResult Index(string Box1, string Box2)
{
    ViewBag.TextBox1 = Box2;
    ViewBag.TextBox2 = Box1;
    return View("index",ViewBag);
}

基本上,当有人点击提交按钮时,我尝试切换textbox1和textbox2的内容。但无论我尝试什么,它都不起作用(即价值保持原样)。起初我以为??可能与它有关,但我用??注释了这些行,但仍然得到了相同的结果。而不仅仅是return view()我尝试了return view("index", ViewBag),但这没有任何区别。谁知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

只需清除您的模型状态即可。用以下代码替换您的POST方法:

[HttpPost]
public ActionResult Index(string Box1, string Box2)
{
    ModelState.Clear();
    ViewBag.TextBox1 = Box2;
    ViewBag.TextBox2 = Box1;
    return View();
}

答案 1 :(得分:-2)

这是控制器需要做的事情。谈论这么简单的任务罗嗦:

    [HttpPost]
    public ActionResult Index(string Box1, string Box2)
    {

        ModelState.SetModelValue("Box1", new ValueProviderResult(Box2, string.Empty, System.Globalization.CultureInfo.InvariantCulture));
        ModelState.SetModelValue("Box2", new ValueProviderResult(Box1, string.Empty, System.Globalization.CultureInfo.InvariantCulture));


        return View();
    }