Я знаю, что эта тема была интересна многим разработчикам и обсуждалась на многих форумах, но я не смог найти правильный ответ, который вполне решает мою проблему. Возможно, я не очень старался найти ответ, и в этом случае было бы неплохо, если бы ваши коллеги-разработчики могли сообщить мне о любых полезных форумах.MVC традиционная форма действия не вызывающая метод контроллера
Проблема, с которой я столкнулась, - это просто традиционное действие HTML, не вызывающее метод ActionResult контроллера.
У меня есть частичный вид под названием "_Form.cshtml" следующим образом:
< _Form.cshtml>
<form action="@Url.Action("Temp_Form", "Product")" method="post" class="k-content" id="tempForm">
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<p class="lead">Please fill in the following form.</p>
<br />
<div class="form-horizontal">
<div class="form-group">
@Html.Label("Brand", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@(Html.Kendo().DropDownList()
.Name("ddlBrand")
.OptionLabel("--- Select ---")
.HtmlAttributes(new { id = "brand", required = "required", data_required_msg = "Select Brand", @class = "form-control" })
.DataTextField("Name")
.DataValueField("Id")
.BindTo(Products.ProductBrandCollection.LoadAll())
)
<span class="k-invalid-msg" data-for="ddlBrand"></span>
</div>
</div>
<div class="form-group">
@Html.Label("Range", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@(Html.Kendo().TextBox()
.Name("tbRange")
.HtmlAttributes(new { required = "required", validationmessage = "Enter Range" })
)
<span class="k-invalid-msg" data-for="tbRange"></span>
</div>
</div>
</div>
<div id="buttondiv">
<div class="column">
<div class="vis" id="submitbutton">
@(Html.Kendo().Button()
.Name("btnSubmit")
.HtmlAttributes(new { type = "submit", @class = "button-next" })
.Icon("arrowhead-e")
.Content("SUBMIT")
.Events(e => e.Click("submit"))
)
</div>
</div>
</div>
</fieldset>
</form>
В главном окне "Product.cshtml", я следующий яваскрипт нажмите событие для кнопки отправки:
function submit(e) {
// handles hiding and showing divs
}
Вот мой ActionResult "Temp_Form", который находится в "ProductController.cs":
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Temp_Form(string ddlBrand, string tbRange)
{
TempData["brand"] = ddlBrand;
TempData["range"] = tbRange;
return Content("");
}
Я sussing это либо «@ Url.Action (» ActionMethod «„контроллер“)» < - эта часть не будучи правильно отформатирован или имеющие как „тип =“ отправить «и» .Events (е => e.Click ("submit")) "для кнопки отправки.
** По какой-то причине я не использую Html.BeginForm() для вызова метода контроллера. Поэтому мой вариант - использовать традиционную форму для передачи данных с представления на контроллер с кнопкой отправки.
Я также пробовал ..
<form action="myController/myAction" method="POST">
выше формат, но мой ActionResult до сих пор не называется.
Я не думаю, что мой основной вид вызывает срабатывание ActionResult, поскольку он имеет только два каскадных DropDownLists, которые выбирают правильную форму на стороне клиента.
Может ли кто-нибудь определить, что я делаю неправильно, или посоветовать мне альтернативы? Как я уже упоминал выше, я не случайно использую Html.BeginForm() просто потому, что у меня есть те Telerik Kendo Validations, которые, похоже, работают только с традиционной формой.
Большое спасибо!
Почему вы не используете 'Html.BeginForm()'? Почему у вас есть '@ Html.AntiForgeryToken()' вне тегов формы? Что такое код в вашей функции submit (e) {'? –
«Я не случайно использую Html.BeginForm() просто потому, что у меня есть те Telerik Kendo Validations, которые, похоже, работают только с традиционной формой.« По некоторым причинам, если я перехожу к Html.BeginForm(), проверка сообщения не отображаются. Я исключил submit (e) просто потому, что не думал, что он имеет отношение к этой теме, поскольку он обрабатывает только скрытие и отображение div. – AUSupernova
Не знаком с проверками Kendo, но, возможно, потому, что '@ Html.BeginForm()' будет добавлять 'novalidate =" novalidate "' (но вы могли бы просто использовать '@ Html.BeginForm()' и установить атрибут «novalidate» в пустую строку, но это не имеет ничего общего с вашей проблемой, поскольку «action =» @ Url.Action («Temp_Form», «Product») »будет генерировать правильный URL-адрес. Вы можете легко проверить это, @ (Html.Kendo(). Button() ... "и заменить на' ', который затем должен отправляться в ваш метод. –