Как передать значение кнопки из модального окна (которое использует частичное представление) в родительское представление - PullRequest
0 голосов
/ 06 ноября 2018

вот кнопка на частичном просмотре,

<button type="button" name="btnid" id="bparentid" value="@item.Itemid " class="btn btn-success" onclick="alert(@item.Itemid)">Select</button>

Просто чтобы проверить, содержит ли оно значение, я включил функцию оповещения об бритве, и я хочу, чтобы значение кнопки передавалось в родительское представление при нажатии кнопки, используя эту скрытую форму ввода в родительском представлении

<input asp-for="Itemid" type="hidden" value=" @item.Itemid" />

Подробнее:

У меня есть две таблицы для записи детей и их родителей по отдельности, Вот модель

public class Children
{
   [Key]
    public int ChildID { get; set; }
    [Required] [StringLength(50)]
    public string FirstName { get; set; }
    [ForeignKey("Parentid")]
    public virtual Parent Parent { get; set; }
  }

public class Parent
{
    [Key]
    public int Parentid { get; set; }
    public string FullName { get; set; }
    public virtual IEnumerable<Children> Children { get; set; }
}

А вот контроллер метода Create для публикации новой дочерней записи с родительской информацией:

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("ChildID,FirstName")] Children children, int existingParentid,
        [Bind("Parentid,FullName")] Parent parent, bool existingparent)
    {
        if (ModelState.IsValid)
        {
            if (existingparent)
            {
                children.Parentid = existingParentid;
                _context.Add(children);
                await _context.SaveChangesAsync();
                return View(children);
            }else
            _context.Add(children);
            await _context.SaveChangesAsync();
            _context.Add(parent);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(children);
    }

Вот метод контроллера для модального частичного представления

public async Task<IActionResult> ModalAction()
    {
        var MyDbContext = _context.Children.Include(C => C.Parent);
        return PartialView(await MyDbContext.ToListAsync());
    }

А вот представление для метода Create

<div class="row">
<div class="col-md-4">
    <form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="FirstName" class="control-label"></label>
            <input asp-for="FirstName" class="form-control" />
            <span asp-validation-for="FirstName" class="text-danger"></span>
        </div>
        @Html.ActionLink("Select Existing Parent", "ModalAction", "Children", null, new { @class = "btn btn-flat margin",
        data_target = "#searchparent", data_toggle = "modal" })
            <input asp-for="Parentid" type="hidden" value=" " />   
        <div class="modal fade" id="searchparent">
            <div class="modal-dialog">
                <div class="modal-content">
                </div>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="Parent.FullName" class="control-label"></label>
            <input asp-for="Parent.FullName" class="form-control" />
            <span asp-validation-for="Parent.FullName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>
</div>

Вот частичное модальное представление

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
     <h4 class="modal-title">Search for Parent data table </h4>
</div>
<div class="modal-body">
    <table class="table">
        <thead>
            <tr>
                <th>  
                    @Html.DisplayNameFor(model => model.FirstName)
                </th>  
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.FirstName)
                    </td>
                    <td>
                        <button type="button" name="bparentid" id="bparentid" value="@item.ChildID" class="btn btn-block btn-success btn-xs"
                                onclick="alert(@item.ChildID)">
                            Select
                        </button>
                    </td>
                </tr>
            }
        </tbody>
    </table>
</div>

Вопрос:

Как передать значение @item.ChildID из частичного представления в представление Create, которое затем передаст его как скрытое значение в контроллер создания

1 Ответ

0 голосов
/ 06 ноября 2018

Поскольку вы пытаетесь изменить значение поля ввода после загрузки страницы, это должно происходить внутри браузера пользователя, поэтому Razor, работающий на стороне сервера, не может помочь. Но вы можете выполнить то, что вы хотите, используя JavaScript:

//First add an ID to your hidden input 
<input id="my-input" ... />

//Second add the following onclick to your button:
<button onclick="document.getElementById('my-input').value = this.value" ...></button>
...