spankyleo123 Ответов: 2

Предварительно заполненные поля в частичном представлении создать


Всем привет,

Новое в разработке MVC. Изо всех сил пытаюсь загрузить частичное представление для "создания" с предварительно заполненными значениями полей из родительского представления.

В основном у меня есть основной вид, а внутри основного вида у меня есть частичный вид, который отображает сетку с кнопкой редактирования и кнопкой добавления.

Вот как я загружаю свое частичное представление в родительское представление.
var url = '@Url.Action("Index", "MyModel")';
$.ajax({
    url: url ,
    type: "get",
    success: function (data) {
        $('#partialPlaceHolder').html(data);
        $('#partialPlaceHolder').fadeIn('fast');
    },
    error: function (xhr, status, error) {
        alert(xhr.responseText);
    }
});


Кнопку "Редактировать" вид нагрузки "редактировать" и "добавить" загружает "создать" вид, довольно стандартный проектирования MVC.

Но теперь моя главная проблема заключается в том, что я хочу предварительно заполнить представление "создать" при нажатии кнопки "Добавить" значениями из родительского представления. Таким образом, пользователям не нужно снова вводить в них значения.

Моя модель состоит из 3 предметов

 public class MyModel
    {

        public int ID { get; set; }

        [DisplayName("My Note")]      
        [Required(ErrorMessage = "Note cannot be left blank.")]
        public string MyNote { get; set; }
               
        [DisplayName("My Value")]
        [Required(ErrorMessage = "Value is required")]
        [StringLength(12, MinimumLength = 12)]
        public string MyValue { get; set; }

        [DisplayName("My List")]
        [Required(ErrorMessage = "Please select an item.")]
        public int MyList{ get; set; }
    
        public virtual MyListModel MyLists { get; set; }
}


Когда нажата кнопка Добавить, я хочу, чтобы представление "создать" предварительно заполнило элемент "мое значение" и "мой список" из родительского представления и заполнило представление "создать" при его загрузке. Таким образом, пользователю нужно будет только заполнить текстовое поле "мои заметки" и нажать кнопку "Создать", чтобы сохранить изменения. Возможно ли что-то подобное? Любая помощь будет оценена по достоинству.

Ниже приведен код результата действия в контроллере my - Create.

Что я уже пробовал:

[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Create(MyModel mymodel)
{
    try
    {
        if (ModelState.IsValid)
        {

            try
            {

                db.MyModel.Add(mymodel);
                db.SaveChanges();
                //Populating droplist
                ViewBag.MyList = new SelectList(db.MyList, "ID", "MyText", mymodel.MyList);
                return Json(new { success = true });
            }
            catch (Exception e)
            {
                throw e;
            }

        }


        return Json(new
        {
            success = false,
            responseText = ModelState.Keys.SelectMany(k => ModelState[k].Errors)
                          .Select(m => m.ErrorMessage).ToList()
        });
    }
    catch (Exception ex)
    {

        return Json(new { success = false, responseText = "Error creating new note. " + ex.Message });
    }

}

2 Ответов

Рейтинг:
12

spankyleo123

Привет, спасибо за ваш ответ. Мне удалось получить значения в модель без использования ajax post.

Я в основном скрыл поля, которые хотел автоматически заполнить, а затем, когда кнопка "Добавить" нажата на представлении "создать", я передаю значения модели (в основном добавляя ее в форму отправки). Ниже приведен код, который сработал.

$('body').on('click', '#btnAdd', function (e) {

           var myValue = $('#myValue').val(); //from the parent view
           var myListId = $('#mylist').val(); //from the parent view
          //Bind the above values to the form, which gets added to the model
           $("#frmCreateNote input[name=myvalue]").val(myValue);
           $("#frmCreateNote #mylist").val(myListId).attr("selected", "selected");
       });


Рейтинг:
1

F-ES Sitecore

Я не совсем уверен в вашем подходе, так как код, который вы публикуете, не имеет большого смысла.

В ореховой скорлупе вы должны вызвать действие на контроллере через ajax и передать этому действию модель, которая будет создана в js из данных родительского представления. Вы можете собирать эти данные динамически с помощью js или просто заставить родительское представление генерировать жестко закодированный js, который создает модель.

Ссылка ниже показывает, как вы передаете модель действию и вводите результаты на страницу, просто адаптируясь по мере необходимости.

asp.net mvc-Pass Model to Controller using Jquery/Ajax-Stack Overflow[^]