2009-09-04 63 views
1

我想更新我的数据库中有两个值的记录,一个是ID,一个是“描述”。 ID永远不能改变,但是我依靠使用强类型的功能来做到这一点。所以,我有以下几点:禁用窗体元素ASP.NET MVC更新

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)没有任何运气。

回答

3

显示这样

Html.Hidden("BusinessID", ViewData.Model.BusinessID) 
<%=Model.BussinessID %> 

这样的ID,你将有在隐藏标签 绑定的ID,你会在标签 显示值,也可以使用其他任何你想要哟可以这样做也

<input type="text" value="<%=Model.BussinessID %>" contentEditable="false"> 

,并把藏在某处的形式

+0

宾果,非常感谢。 – Kezzer 2009-09-04 11:40:47

+0

另外,从你给我我可以创建一个帮手为我做。 – Kezzer 2009-09-04 11:41:57

0

,而不是Html.Textbox你可以使用Html.Hidden( “BusinessID”,ViewData.Model.BusinessID)

+0

查看我对griegs的评论。 – Kezzer 2009-09-04 11:33:06

0

是否有您所显示的ID特别的原因?如果没有,那么就把它留在外面,然后在你的控制器上使用TryUpdateModel()来代替。

或者那不是你问什么?

编辑

<%= Html.TextBox("name","value", null, new { style="readonly"}) %> 

编辑2

你可能会认为这样做就像//站点的路由/控制器/ yourbusinessid

那么你可以使用id,因为它是通过到您的控制器,然后您可以在视图中简单地使用<%= Model.BusinessId %>作为字符串。

+0

我确实需要显示ID是。该ID不是一个整数值,它是一个手动输入的varchar字段,用户在编辑时需要在屏幕上看到该字段。 – Kezzer 2009-09-04 11:32:31

+0

在这种情况下,你可以在你的文本框中使用new {style =“readonly”}? – griegs 2009-09-04 11:33:20

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); 
} 
相关问题