我有一个表单使用不提供表单回发时更新文本框值的模型视图对象。在提交表单时,我编辑绑定到文本框的对象的属性。当窗体返回时,对象属性仍会更改,但文本框值不会更改。这就像文本框的值被缓存,不会改变。我该如何解决?MVC 4文本框未在回发中更新
文本框默认值: “”
文本框代码:
@Html.TextBoxFor(m => m.Project.tNumber, new { @readonly = "readonly", @class = "readonly" })
对象属性:
[Display(Name = "T Number")]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string tNumber { get; set; }
控制器的操作方法:
[Authorize(Roles = "Admin, OrderEntryManager")]
[HttpPost]
public ActionResult Verify(string submit, OrderEntryEdit model)
{
MembershipUser user = Membership.GetUser(User.Identity.Name);
int userId = WebSecurity.GetUserId(User.Identity.Name);
if (userId > 0)
{
if (ModelState.IsValid)
{
string ButtCommand = submit;
switch (ButtCommand)
{
case "Create Order":
if (model.CreateOrder(userId))
{
ViewBag.Status = "success";
ViewBag.Message = "The order has been created.";
}
else
{
ViewBag.Status = "error";
ViewBag.Message = "There was a problem in trying to create this order.";
}
default:
ViewBag.Status = "error";
ViewBag.Message = "Unrecognized form action.";
}
}
}
else
{
ViewBag.Status = "error";
ViewBag.Message = "Unrecognized user.";
}
return View("Verify", model);
}
视图模型方法:
public class OrderEntryEdit : OrderEntry
{
public OrderEntryEdit()
{
base.Project = new Project();
base.ShipTo = new ShipTo();
base.SoldTo = new SoldTo();
base.Unit = new List<Unit>();
}
//method simplified, but is reaching this method
public Boolean CreateOrder(int adminUserId = 0)
{
this.Project.tNumber = "T123456";
return true;
}
}
文本框的值: “”
编辑:与此替换的代码文本框:
<input type="text" readonly="readonly" class="readonly" value="@Model.Project.tNumber" />
已经解决了这一问题。显然,该文本框正在被缓存。 总之,不要使用剃刀语法,好的旧html工作正常。 我希望这可以帮助别人!
什么是您的控制器动作签名?在解决这些问题时,Fiddler是你最好的朋友,它几乎总是与命名 – reckface 2014-09-26 14:50:06
并且你说文本框是只读的!?! – reckface 2014-09-26 14:50:36
您是否将更改后的视图模型推回到视图中?也就是说,作为回应,你需要做'返回视图(“视图名称,模型)''而不是只是'返回视图(”视图名称“)' – tweray 2014-09-26 14:55:44