Я новичок в MVC, и я использую Razor. У меня есть форма, где пользователь может редактировать текстовые поля, а затем - сохранять. Вот моя формаhtml.TextArea() значение после PostBack
@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);
}
...
}
Это фактически все работало так, как я хотел. Однако я был удивлен, что это произошло. Мой код загрузил запись из базы данных и передал ее в виде модели. Как было известно, что представление не устанавливает значение текстового поля в значение из модели и оставляет его в качестве последнего пользователя?
EDIT
Я создал простой проект, чтобы проверить это думать что-то в моем проекте может быть осуществление, как это работает. Этот простой проект представляет собой пустой проект 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" />
}
Я хотел бы, чтобы показать 'что-то' в текстовом поле после того, как пользователь нажмет submit, но это не так. Он имеет то, что ранее вводил пользователь. Что мне нужно сделать, чтобы показать «что-то»?
Спасибо,
Как в сторону, посмотрите на String.IsNullOrWhitespace() и сохраните себе несколько ключевых штрихов. –
Спасибо. Этот фрагмент будет короче, если бы я использовал IsNullOfWhitespace(). Как бы то ни было, мне все равно нужно иметь if/else позже для проверки нулевой или этой строки 'command.Parameters.Add (новый SqlParameter («@ Description», contract.Description)); будет выдавать исключение, описание будет null. То, как у меня будет, будет на 1 строку короче. Кроме того, это шаблон, который я использовал в обычном ASP.NET для передачи «очищенных» значений обратно пользователю, если проверка не выполняется. Однако, поскольку MVC, похоже, хочет использовать то, что пользователь ввел последним, а не то, что в модели, я не уверен, как это получится. –
Можете ли вы установить точку останова на своей обратной линии и проверить, чтобы увидеть значение 'contract.Description' в этой точке? –