簡體   English   中英

為什么不輸入“提交”不適用於Form?

[英]Why won't type “submit” not work with Form?

我正在使用.NET MVC為新用戶創建IQ測試。 當前,我有表單設置要發布到數據庫:

<div class="form-group">
  <input type="button" class="btn btn-default personality-finish-btn" value="send" />
</div>

但是出於引導驗證的原因,我需要像這樣切換到type =“ submit”:

<div class="form-group">
  <input type="submit" class="btn btn-default personality-finish-btn" value="Submit" />
</div>

通過單擊提交按鈕發布表單時,我在MVC上遇到了一個很討厭的錯誤:

“參數字典包含用於方法'System.Threading.Tasks.Task`1 [System.Web.Mvc.JsonResult] PersonalityEvaluation(System.String,布爾)”中的“ TechAcademyLMS.Controllers.RegistrationController”。 可選參數必須是引用類型,可為空的類型,或者必須聲明為可選參數。 參數名稱:參數'

這僅在從“按鈕”類型更改為“提交”類型時發生。 由於我不在發布邏輯中的任何位置調用按鈕,因此我確信這一定是內置HTML問題。

任何線索將不勝感激,謝謝。

編輯:

這是我一直在使用的當前驗證邏輯。 我以前從未使用過bool,所以我不知道為什么現在需要:

$(document).ready(function () {


    $(".personality-finish-btn").on("click", function () {
        checkPersonalityRadio();
    })
})

function checkPersonalityRadio() {
    var pass = false;
    var score = 0;
    for (var i = 1; i < 51; i++) {
        var value = $("input[name='eval-checkbox-" + i + "']:checked").val();
        if (value !== undefined) {
            score += parseInt(value);
        }
    };

    if (score >= 35 && 50) {
        score += " Pass";
        pass = true;
    } else if (score <= 34){
        score += " Fail";
}

    score = JSON.stringify(score);

    $.ajax({
        type: "POST",
        url: "/Registration/PersonalityEvaluation",
        data: { score: score, pass: pass },
        success: function (response) {
            window.location.href = "/Registration/StepTwelve";
        },
        dataType: "json",
        error: function () {
            console.log(data);
            alert("Whoops, something went wrong.");
        },
        traditional: true
    });
}

按鈕類型不會提交表單,但會運行您的javascript函數。 類型為commit的輸入實際上會提交包含該輸入的表單。

如果您想運行javascript但又不想提交表單,請使用Submit事件,然后取消默認的表單行為,如下所示:

$(".personality-finish-btn").on("submit", function () {
    checkPersonalityRadio(); // here you can send you details to API controller by Ajax.
    return false; //this will avoid the default form behaviour, which is being submitted.
})

更新:我認為您的問題是您試圖在POST提交中發送兩個參數。 ModelBinder嘗試將這些參數映射到對象,因此它可能正在嘗試將所有參數分配給PersonalityEvaluation(System.String,Boolean)中的字符串,這就是布爾值始終為null的原因。

最好的選擇是創建一個包裝兩個屬性的對象。 就像是:

public class TestResults(){
    public string score {get; set;}
    public bool pass {get; set;}
}

因此,控制器中的操作方法如下所示:

public PersonalityEvaluation(TestResults results){
    //your logic here
}

看一下此鏈接http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

Tony我的項目中多次發生此錯誤,並成功解決了該錯誤。 因此,如果您仔細查看錯誤,它會說

“參數字典包含參數提供一個空條目‘System.Boolean’非空類型的‘通’的方法” System.Threading.Tasks.Task`1 [System.Web.Mvc.JsonResult] PersonalityEvaluation(System.String,布爾)”中的“ TechAcademyLMS.Controllers.RegistrationController”。 可選參數必須是引用類型,可為空的類型,或者必須聲明為可選參數。 參數名稱:參數'

說明:

我假設您具有如下的PersonalityEvaluation()參數:

PersonalityEvaluation(String somename,Bool somename)

因此錯誤表明,我們正在將null值傳遞給bool參數,但同時我們將其指定為非null類型。

注意:無論是從簡單視圖操作鏈接還是從ajax javascript發送參數的地方,錯誤都將保持不變。

解:

您可以將參數設置為可空類型,如下所示:

PersonalityEvaluation(String somename,Bool?somename)

或確保您始終發送不帶null的參數,以使其成為可空類型。 對於字符串,我們不必擔心它已經是可為null的類型。所以沒問題.. :)

希望以上信息對您有所幫助,請讓我知道您的想法或反饋

謝謝

KARTHIK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM