0

我是 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);
    }
    ...
}

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

编辑

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

我的模型.cs

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

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

家庭控制器.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);
        }
    }
}

索引.cshtml

@model MvcApplication6.Models.MyModel

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

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

谢谢,

4

1 回答 1

0

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

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

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

于 2013-10-11T18:31:33.107 回答