PostBack后的html.TextArea()值

时间:2013-10-11 18:09:54

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

我是MVC的新手,我正在使用Razor。我有一个表单,用户可以在其中编辑文本字段,然后单击保存。这是我的表格

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "form" }))
{
    ...
    @Html.TextArea("Description", Model.Description, 5, 50, null)
    ...
}

在我测试了这个并验证它正常工作后,我添加了一些服务器端检查。对于描述字段,我检查它不是空白。如果没有则显示错误消息。这是我的代码

[HttpPost]
public ActionResult EditContract(Contract contract)
{
    if (contract.Description == null)
    {
        contract.Description = string.Empty;
    }
    contract.Description = contract.Description.Trim();

    if (contract.Description == string.Empty)
    {
        ViewBag.Message = "Description can't be blank";

        contract.LoadContract(contract.ContractId);

        return View(contract);
    }
    ...
}

这实际上都按我的意愿行事。然而,我很惊讶它确实如此。我的代码从数据库加载记录并将其作为模型传递给视图。视图如何知道不将文本框的值设置为模型中的值,并将其保留为用户上次输入的值?

修改

我创建了一个简单的项目来测试它,认为我的项目中的某些内容可能会影响它的工作方式。这个简单的项目是一个使用剃刀的空MVC 4项目。然后我添加了以下代码。

MyModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication6.Models
{
    public class MyModel
    {
        public string Name { get; set; }
    }
}

HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication6.Models;

namespace MvcApplication6.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var myModel = new MyModel();
            return View(myModel);
        }

        [HttpPost]
        public ActionResult Index(MyModel model)
        {
            model.Name = "something";
            return View(model);
        }
    }
}

Index.cshtml

@model MvcApplication6.Models.MyModel

@using (Html.BeginForm())
{
    @Html.TextBoxFor(model => model.Name)
    <br />
    <input type="submit" value="submit" />
}

我希望在用户点击提交后在文本框中显示“内容”,但事实并非如此。它具有用户之前输入的任何内容。我需要做些什么来让它显示“某事”?

谢谢,

1 个答案:

答案 0 :(得分:0)

通常如果我想将一个字段传回控制器,我将使用for helper

@Html.TextAreaFor(x => x.Description, ...)

这将使用模型中的数据填充字段,如果字段更改,则更改的值将发送回控制器。我找到了非“for”帮助器,如果我将该字段命名为与我的模型名称相同(正如您所做的那样),它仍然会将更改后的值传递回控制器。 MVC将值绑定到加载字段,但发送回控制器的只是更改的值。希望这有助于:)