我想更新数据库中有两个值的记录,一个是ID,一个是“描述”。 ID永远不会被更改,但我依赖于使用强类型功能来实现它。所以,我有以下内容:
Inherits="System.Web.Mvc.ViewPage<Business>"
这很好,因为它可以让我把所有东西都拿回来。问题是当我使用以下行时:
<%= Html.TextBox("BusinessID", ViewData.Model.BusinessID, new { disabled = "disabled", style = "width:50px;", @class = "uppercase", maxlength = "4" })%>
使用disabled = "disabled"
选项时,它无法识别BusinessID,因此不会将其传递回控制器,而控制器又会在绑定对象时出现问题。
不是你需要它,但这是控制器动作:
[HttpPost]
public ActionResult EditBusiness(Business business)
{
if (!ModelState.IsValid)
return View(business);
// update business here
_contractsControlRepository.UpdateBusiness(business);
return RedirectToAction("Businesses");
}
为什么会发生这种情况?当他们被禁用时,我没有意识到表单元素完全隐藏在回发上。我不希望用户编辑该特定字段。我也试过Html.DisplayFor(b=>b.BusinessID)
而没有任何运气。
答案 0 :(得分:3)
显示像这样的ID
Html.Hidden("BusinessID", ViewData.Model.BusinessID)
<%=Model.BussinessID %>
这样你就可以在隐藏标签中获得绑定的id 并且您将在标签中显示该值 或者你可以使用你想要的任何其他东西你也可以这样做
<input type="text" value="<%=Model.BussinessID %>" contentEditable="false">
并将隐藏的内容放在表格中
答案 1 :(得分:0)
而不是Html.Textbox你可以使用Html.Hidden(“BusinessID”,ViewData.Model.BusinessID)
答案 2 :(得分:0)
您是否有特殊原因要显示ID?如果没有,那么将它留在控制器上,只需使用TryUpdateModel()代替。
或者这不是你的要求?
修改强>
<%= Html.TextBox("name","value", null, new { style="readonly"}) %>
修改2
你可能会考虑做一个像// site / controller / yourbusinessid
这样的路线然后您可以使用ID传递给您的控制器,然后您可以在视图中使用<%= Model.BusinessId %>
作为字符串。
答案 3 :(得分:0)
你总是可以选择“硬编码”html元素,或者编写你自己的html帮助方法来实现它。
public static string DisabledTextBox(this HtmlHelper helper, string name, object value)
{
return String.Format(@"<input type="text" name="{0}" id="{0}" disabled="disabled" value="{1}" />", name, value);
}