#c# #asp.net-mvc #razor
#c# #asp.net-mvc #razor
Вопрос:
У меня есть read-only
текстовое поле, которое должно инициализироваться значением динамически. Это поле присутствует на странице, которая используется для ввода значений в сведения, соответствующие проигрывателю, который был создан на предыдущей странице (я использую RedirectToAction()
для этой цели, но не смог получить доступ к переданному PlayerID
значению «» из контроллера текущей страницы. Итак, решили использовать TempData
. ). Поскольку PlayerID
изменения происходят каждый раз при добавлении нового игрока, это поле должно отображать это значение, оставаясь доступным только для чтения. Кроме того, это required
поле «, поэтому форма не может быть отправлена, пока не будет установлено значение.
@Html.TextBoxFor(model => model.PlayerID, htmlAttributes: new { @readonly = "read-only", @class = "control-label col-md-2", value = @Html.Raw(TempData["PlayerID"]) })
Как я могу установить значение этого поля, как оно есть в TempData["PlayerID"]
?
Комментарии:
1. Никогда не устанавливайте
value
атрибут при использованииHtmlHelper
метода. Вы присваиваете значение свойствуPlayerID
в методе GET перед передачей модели в представление (и нет такой вещи, как@readonly = "control-label col-md-2"
— я полагаю, вы хотите@Html.TextBoxFor(model => model.PlayerID, new { @readonly = "readonly", @class = "control-label col-md-2" })
2. @StephenMuecke
GET
Метод имеет следующий код:public ActionResult Create() { ViewBag.PlayerID = new SelectList(db.PersonalDetails, "ID", "FirstName"); return View(); }
НоPlayerID
он не отображается в этом текстовом поле только для чтения. Как мне его отобразить?3. A
SelectList
предназначен для использования в выпадающем списке (не в текстовом поле)!4. @StephenMuecke Мне просто нужно отобразить
PlayerID
игрока, созданного на предыдущей странице, а не перечислять идентификаторы всех существующих игроков. И нужно сделать его доступным только для чтения, потому что пользователь может добавлять только сведения о существующем игроке и не может изменить его идентификатор.5. В своем вопросе вам нужно подробнее рассказать о том, что вы хотите сделать, и о рабочем процессе. Ваш код и комментарии не имеют смысла без определенного контекста. Для чего это представление, что такое модель, каковы методы контроллера (включая тот, в котором вы перенаправлены на метод, который сгенерировал это представление. Если вы ранее создали a
Player
, затем передайте его идентификатор этому методу, а затем установите значение свойства на основе этого идентификатора.
Ответ №1:
У вас может быть либо JavaScript, который запускается при загрузке страницы, например:
@section Scripts
{
<script>
$(function(){
$("#PlayerID").val('@TempData["PlayerID"]');
});
</script>
}
Или вы можете инициализировать модель для представления внутри действия, поэтому, если ваше имя действия было ‘PlayerDetails’, тогда у вас должно быть что-то вроде этого:
public ActionResult PlayerDetails()
{
return View(new Player{PlayerID=TempData["PlayerID"]}
}
Таким образом, когда представление привязывается к модели представления, оно будет инициализировано переданным значением.
Ответ №2:
Вы можете попробовать следующий код:
@Html.TextBox("PlayerID", @TempData["PlayerID"] ,new { @readonly = "read-only", @class = "control-label col-md-2"})
Или в вашем случае:
@Html.TextBoxFor(model => model.PlayerId, htmlAttributes: new { @readonly = "read-only", @class = "control-label col-md-2", Value = @Html.Raw(TempData["PlayerID"]) })