2009-09-04 4 views
1

Я хочу обновить запись в моей базе данных, которая имеет два значения: один - это идентификатор, а один - это «описание». Идентификатор никогда не может быть изменен, однако я полагаюсь на использование сильно типизированных функций для этого. Итак, у меня есть следующее:Отключенные элементы формы ASP.NET MVC Update

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 %> 

Таким образом, вы будете иметь идентификатор для связывания в скрытом теге и вы будете отображать значение в метке или вы можете использовать что-нибудь еще, что вы хотите йо может сделать как этот также

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

и поставить спрятана где-то в виде

+0

Бинго, спасибо большое. – Kezzer

+0

Кроме того, из того, что вы мне дали, я могу просто создать помощника, чтобы сделать это для меня. – Kezzer

0

вместо Html.TextBox вы можете использовать Html.Hidden ("BusinessID", ViewData.Model.BusinessID)

+0

Просмотреть мой комментарий к griegs. – Kezzer

0

Есть ли конкретная причина, вы показываете идентификатор? если нет, то оставьте это, и на вашем контроллере просто используйте TryUpdateModel().

или это не то, что вы просите?

редактировать

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

Edit 2

Вы могли бы думать о выполнении маршрута как // сайт/контроллер/yourbusinessid

, то вы можете использовать идентификатор, как это прошло к вашему контроллеру, и вы можете, по вашему мнению, просто использовать <%= Model.BusinessId %> как строку.

+0

Мне нужно отобразить ID да. Идентификатор не является целым значением, это введенное вручную поле varchar, которое пользователь должен видеть на экране во время редактирования. – Kezzer

+0

В этом случае вы можете использовать в своем текстовом поле новый {style = "readonly"}? – griegs

0

у вас всегда есть возможность либо «жестко кодировать» элемент html или написать собственный метод html helper для этого.

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); 
} 
Смежные вопросы