.submit () предотвращает отправку формы - PullRequest
0 голосов
/ 29 мая 2018

У меня довольно простая форма и ViewModel, которая отлично работает, но когда я добавляю этот JS, форма больше не отправляется в контроллер:

$("#crmtForm").submit(function (e) {
    console.log('submit');
});

Почему?Я почти уверен, что это должно сработать ... Пожалуйста, кто-то может помочь, это не имеет смысла.

Контроллер

[HttpPost]
public async Task<ActionResult> Create(CRMTItemViewModel viewModel)
{
    viewModel.CreatedBy = System.Security.Claims.ClaimsPrincipal.Current.Claims.FirstOrDefault(c => c.Type == "name").Value;
    if (viewModel.ProjectTitle == "spinnertest")
        return View();

    // Insert db rows?
    var crmtItem = await crmtItemsManager.InsertItem(viewModel);

    // Initialise workspace on a seperate thread
    new Thread(() =>
    {
        var projectManager = new ProjectManager();
        projectManager.ProcessRequest(crmtItem);
    }).Start();

    // Redirect to item
    return RedirectToAction("Details", new { id = crmtItem.Id });
}

Форма

@using (Html.BeginForm("Create", "CrmtItems", FormMethod.Post, new { id = "crmtForm" }))
{
<div class="form-horizontal">
    <h4>New Project Workspace Form</h4>
    <hr />


    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.ProjectTitle, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.ProjectTitle, new { htmlAttributes = new { @class = "form-control", required = "required" } })
            @Html.ValidationMessageFor(model => model.ProjectTitle, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.ProjectStage, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EnumDropDownListFor(model => model.ProjectStage, new { @class = "form-control", required = "required" })
            @Html.ValidationMessageFor(model => model.ProjectStage, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CRMTNumber, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CRMTNumber, new { htmlAttributes = new { @class = "form-control", required = "required" } })
            @Html.ValidationMessageFor(model => model.CRMTNumber, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.GbSNumber, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.GbSNumber, new { htmlAttributes = new { @class = "form-control", required = "required" } })
            @Html.ValidationMessageFor(model => model.GbSNumber, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Confidential, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.CheckBoxFor(model => model.Confidential, new { @class = "form-control", @style = "height:17px;" })
            @Html.ValidationMessageFor(model => model.Confidential, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => Model.SelectedTags, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.HiddenFor(m => m.Id, new { required = "required" })
            @Html.ListBoxFor(m => m.SelectedTags, new SelectList(users, "UserName", "DisplayName"), new { @class = "teamSelecter", name = "states[]", multiple = "multiple", style = "display:none; width:100%;", required = "required" })
            @Html.ValidationMessageFor(model => model.SelectedTags, "", new { @class = "text-danger" })
            <p id="pmWarning" class="text-danger" hidden>Please select one or more project managers</p>
        </div>
    </div>

    <br />
    <button id="formSubmit" class="btn btn-default btn-lg pull-right" type="submit" value="submit">Submit</button>
    <div class="loader pull-right" hidden></div>

</div>
}

ViewModel

public class CRMTItemViewModel
{
    public int Id { get; set; }

    [Display(Name = "Project Title")]
    [Remote("DoesProjectTitleExist", "CRMTItems", HttpMethod = "POST", 
        ErrorMessage = "Workspace for that project title already exists.")]
    public string ProjectTitle { get; set; }

    [Display(Name = "Project Stage")]
    public ProjectStage? ProjectStage { get; set; }

    [Display(Name = "CRMT Number")]
    [Remote("DoesCrmtNumberExist", "CRMTItems", HttpMethod = "POST",
        ErrorMessage = "Workspace for that CRMT number already exists.")]
    public int? CRMTNumber { get; set; }

    [Display(Name = "GBS Number")]
    [Remote("DoesGbSNumberExist", "CRMTItems", HttpMethod = "POST", 
        ErrorMessage = "Workspace for that GBS project number already exists.")]
    public int? GbSNumber { get; set; }

    public bool Confidential { get; set; }

    [Display(Name = "Project Managers")]
    public IEnumerable<string> SelectedTags { get; set; }
}

1 Ответ

0 голосов
/ 29 мая 2018

Я попробовал ваш код в моем проекте, он работает, может быть проблема с вашей версией jquery, еще одна вещь, которую я обнаружил, когда создавал представление скаффолдинга с этой моделью, оно автоматически создавалось @section Scripts { @Scripts.Render("~/bundles/jqueryval") } в конце страницы просмотра, когда я удалялэтот скрипт со страницы затем может вызывать метод post, иначе нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...