Как обрабатывать значение входных данных с отключенным атрибутом html в Asp.Net основные страницы Razore?

#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" />