Удаленный атрибут MVC - проблема с отправкой - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь проверить, существует ли комбинация typeId и SuppmentId в моей базе данных.Поэтому я добавил удаленный атрибут в мой идентификатор дополнения, который делает это.Моя проблема заключается в том, что проверка должна сработать при изменении любого выпадающего списка.Я вроде исправил эту клиентскую сторону с помощью javascript на обмене ddl.Но сейчас я не могу опубликовать свою форму.Когда я нажимаю кнопку, он фокусируется на последнем выпадающем списке, но не отображает никаких ошибок, и мой метод Post в контроллере не срабатывает.Если я выполняю form.submit () в консоли Chrome, вызывается метод, но проверка игнорируется.Кто-нибудь имел эту проблему раньше?

Кстати, этот код очищен до минимума, поэтому метки, сообщения об ошибках и т. Д. Могут отсутствовать, это не должно быть проблемой.

Частичное представление:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SupplementTypeClass>" %>

<script src="<%: Url.Content("~/Scripts/jquery-1.5.1.min.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>"
    type="text/javascript"></script>
<% using (Html.BeginForm("AddEditSupplementType", "Supplement"))
   { %>
<%: Html.ValidationSummary(true)%>
<fieldset>

    <legend>
        Add type
    </legend>
    <div class="editor-content">
        <div class="editor-label">
            <%: Html.LabelFor(model => model.SupplementId)%>
        </div>
        <div class="editor-field">
            <%: Html.DropDownListFor(model => model.SupplementId, new SelectList(ViewBag.Supplements, "SupplementId", "Name", Model.SupplementId), "Select supplement", new { onchange = "$('#ddl').removeData('previousValue');$('#ddl').valid();" })%>
            <%: Html.ValidationMessageFor(model => model.SupplementId)%>
        </div>
    </div>
    <div class="editor-content">
        <div class="editor-label">
            <%: Html.LabelFor(model => model.TypeId)%>
        </div>
        <div class="editor-field">
            <%: Html.DropDownListFor(model => model.TypeId, new SelectList(ViewBag.Types, "TypeId", "Name", Model.TypeId), "Select type", new { id ="ddl" })%>
            <%: Html.ValidationMessageFor(model => model.TypeId)%>
        </div>
    </div>
    <div class="editor-buttons">
        <input type="submit" value="Save" />
    </div>
</fieldset>
<% } %>

Контроллер:

[HttpPost]
        public ActionResult AddEditSupplementType(SupplementTypeClass sup)
        {
            if (ModelState.IsValid)
            {
                //code to insert to DB
            }
            return RedirectToAction("FicheAddEditSupplementType", new { supplementTypeId = sup.supplementTypeId});
        }

Класс:

public class SupplementTypeClass
{

    #region Members

    public int SupplementId { get; set; }

    [RemoteAttribute("SupplementTypeCheck", "Supplement", AdditionalFields = "SupplementId")]
    public int TypeId { get; set; }

    #endregion
}

1 Ответ

1 голос
/ 11 июля 2012

Атрибут Remote выполняет Ajax-вызовы с использованием метода GET по умолчанию, а не POST.

Укажите свой метод POST в вашей модели

[RemoteAttribute("SupplementTypeCheck", "Supplement", AdditionalFields = "SupplementId", HttpMethod="POST")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...