#c# #asp.net-core
Вопрос:
При отправке ввода с отключенным атрибутом html для обновления сущности я столкнулся с нулем input tag
, когда состояние модели.ИсВалид был потрясен.
Я хочу обновить объект с именем Эпизод. На мой взгляд, это :
<form method="post" enctype="multipart/form-data">
<input type="hidden" asp-for="@ViewData["EpisodeId"]" />
<input type="hidden" asp-for="@ViewData["EpisodeFileName"]" />
<h2>اطلاعات اپیزود</h2>
<hr />
<div class="col-md-8">
<div class="danger" asp-validation-summary="All"></div>
<div class="form-group">
<label>نام اپیزود</label>
<input type="text" asp-for="@Model.Episode.EpisodeTitle" class="form-control">
<span asp-validation-for="@Model.Episode.EpisodeTitle"></span>
</div>
<div class="form-group">
<label>زمان اپیزود</label>
<input type="datetime" asp-for="@Model.Episode.EpisodeTimeLength" class="form-control">
<span asp-validation-for="@Model.Episode.EpisodeTimeLength"></span>
</div>
<div class="form-group">
<label>Current EpisodeFileName</label>
<input disabled asp-for="@Model.Episode.EpisodeFileName" />
</div>
</div>
</form>
Как вы можете видеть, у меня есть приведенный ниже код:
<div class="form-group">
<label>Current EpisodeFileName</label>
<input disabled asp-for="@Model.Episode.EpisodeFileName" />
</div>
Я хочу, чтобы администратор видел, каково текущее имя файла эпизода (это может быть файл mp4 или т. Д.) При обновлении.
Вот мой EditEpisode.cshtml.cs:
public class EditEpisodeModel : PageModel
{
private ICourseServices _courseServices;
public EditEpisodeModel(ICourseServices courseServices)
{
_courseServices = courseServices;
}
[BindProperty]
public Episode Episode { get; set; }
public void OnGet(int id)
{
Episode = _courseServices.GetEpisodeByEpisodeId(id);
ViewData["EpisodeId"] = id;
ViewData["EpisodeFileName"] = Episode.EpisodeFileName;
}
public IActionResult OnPost(Episode episode)
{
if (!ModelState.IsValid)
{
ModelState.AddModelError("","لطفا تمام فیلد ها را با دقت وارد کنید");
return Page();
}
return Page();
}
}
Как вы можете видеть, когда мое приложение запущено, я решил оставить значение одного из моих входных данных пустым, например, я оставил пустым следующий ввод:
<input type="text" asp-for="@Model.Episode.EpisodeTitle" class="form-control">
Итак, как вы знаете, из-за моего утверждения if внутри OnPost
метода:
if (!ModelState.IsValid)
{
ModelState.AddModelError("","لطفا تمام فیلد ها را با دقت وارد کنید");
return Page();
}
Мой OnPost
метод вызовет ReturnPage()
.
Мой вопрос в том, почему при ReturnPage()
вызове, входные <input disabled asp-for="@Model.Episode.EpisodeFileName" />
данные становятся пустыми!?
Просто, когда я использую отключенный атрибут внутри своего входного тега, а затем публикую информацию, мой ввод становится пустым! Но когда я удалил этот атрибут из входных данных, я не столкнулся с этой проблемой !
Так что кто-нибудь может мне это объяснить ?
Комментарии:
1. @Rena Большое спасибо, это сработало. Но еще один вопрос. Что я должен делать при использовании тега <p> вместо входного тега? потому что я пробовал это с тегом <p> раньше, и это тоже не сработало.
2. Привет @Хоссейн, тег <p> невозможно передать в серверную часть при отправке формы. Это не вызвано отключенным атрибутом. Сама по себе форма не может быть отправлена. Только элемент ввода или выбора этих типов может быть отправлен в форму. <p> — это просто текст для отображения в html.
3. @Рена, я только что это сделал. Еще раз спасибо вам.
Ответ №1:
Браузеры не поддерживают отключенное свойство для отправки с формами по умолчанию:
Разница между отключенными и только для чтения заключается в том, что элементы управления, доступные только для чтения, все еще могут функционировать и по-прежнему могут фокусироваться, в то время как отключенные элементы управления не могут получать фокус и не отправляются вместе с формой и, как правило, не функционируют как элементы управления, пока они не будут включены.
Для вашего сценария вы можете изменить disabled
его на readonly
.
<input readonly asp-for="@Model.Episode.EpisodeFileName" />