2017-06-18 3 views
-1

Gibt es eine einfache Möglichkeit, die Modellvalidierung bei deaktivierten Eingabefeldern zu deaktivieren? Mein Problem ist, ich habe ein Formular mit Model-Validierung Ich benutze jquery, um eine Eingabe zu deaktivieren und es auszublenden und Ajax zu verwenden, um das Formular zu senden, aber es ist noch Model-Validierung für dieses Feld, wenn es deaktiviert ist Ich verwende HTML-Validierung für Client Seiten- und Modellvalidierung für Serverseite. Jede Hilfe würde sehr geschätzt werden. Dies ist nur ein Teil meines Codes, der viel größer ist, aber ich wollte nur wissen, ob es eine einfache Möglichkeit gibt, die Modellvalidierung auf einem deaktivierten Eingabefeld zu deaktivieren. Nicht sicher, ob Sie in der Lage sein werden, zu sagen, wie es mit meinen Codebeispielen funktioniert. Ich habe versucht, sie zu vereinfachen, um den Punkt zu verdeutlichen, aber ich glaube, ich hätte es abgeschlachtet. Ich entferne die erforderliche html 5 und deaktiviert von der Position Textfeld, um für die Modellüberprüfung zu prüfen, die groß funktioniert, aber ich will nicht, dass es funktioniert, wenn das Positionstextfeld gesperrt wird.Einfache Möglichkeit, die Modellvalidierung für deaktivierte Formulareingabe zu deaktivieren?

Teil Modell

[Required(ErrorMessage = "You must enter a location")] 
    [StringLength(15, ErrorMessage ="Must Be Under 15 Characters")] 
    public string location_txt_box { get; set; } 

Teil des Controllers

[HttpPost] 
    [ValidateAjax] 
    public JsonResult AddData(form_model form_data) 
    { 
     return Json(form_data); 
    } 

    public class ValidateAjaxAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      if (!filterContext.HttpContext.Request.IsAjaxRequest()) 
       return; 

      var modelState = filterContext.Controller.ViewData.ModelState; 
      if (!modelState.IsValid) 
      { 
       var errorModel = 
         from x in modelState.Keys 
         where modelState[x].Errors.Count > 0 select new 
         { 
          key = x, 
          errors = modelState[x].Errors.Select(y => y.ErrorMessage).ToArray() 
         }; 
       filterContext.Result = new JsonResult() 
       { 
        Data = errorModel 
       }; 
       filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; 
      } 
     } 
    } 

Part of View

<section class="u_select_section"> 
        <center> 
         <label> 
     @Html.RadioButtonFor(m => m.user_department_radio_group,"user", htmlAttributes: new{ 
          @id = "u_select" 
          }) 
          Filling out for myself 
         </label> 

        </center> 
       </section> 

       <section id="location_display_section" class="location_display_section"> 

        <div id="location_error"></div> 
        @Html.TextBoxFor(m => m.location_txt_box, htmlAttributes: new{ 

        @id = "dep_loca_id", 
        @disabled = "disabled", 
        @placeholder = "Type your Location", 
        @required = "required" 
       }) 

       </section> 

Teil jquery

$('#request_form').on('submit', function (e) { 

      $.ajax({ 
       type: "POST", 
       url: "../Home/AddData", 
       datatype: "json", 
       data: $("#request_form").serializeArray(), 

       beforeSend: function() { 
        $("#progress").show(); 
       }, 
       complete: function() { 
        $('#progress').hide("fade",2000); 
       }, 
       success: function (data) { 

        alert("Success") 

       }, 
       error: function (data) { 

        $("#location_error").show(); 
        var response = JSON.parse(data.responseText); 
        var location_error = response[0].errors[0]; 
        $("#location_error").text("" + location_error + "").css({ "color": "red" }); 

       } 

      }); 

     e.preventDefault(); 
    }); 

JQuery für Haut und

//disable functions 
    function disable_function_1(i) { 
     return $(i).attr("disabled", "disabled"); 
    } 

    //user and department radio button click functions 
    $("#u_select").click(function() { 


     $(dep_loca_id).hide(effect1);//hide the department location text box 
     disable_function_1(dep_loca_id);//disable the department location text box 

    }); 
+0

Post einig Beispielcode –

Antwort

0

deaktivieren können Sie bestimmte Feldvalidierung mit ModelState.Remove() entfernen.

[HttpPost] 
public ActionResult YourAction(YourModel model) 
{ 
    // your condition here 
    ModelState.Remove("location_txt_box "); // to omit specific field according to condition 

    if (ModelState.IsValid) 
    { 
     // your code here 
    } 

    return View(); 
} 
+0

Das kann herausarbeiten müssen nur wenn Textfeld für den Zustand deaktiviert ist einfach nicht sicher, ob ich für diesen immer noch irgendwie neu zu MVC und C# überprüfen kann ich werde es ein versuchen Sie – Helleos

+0

Wann deaktivieren Sie Ihre Texteingabe? – hasan

+0

können Sie verstehen, ob die Optionsschaltflächen für Benutzer und Abteilung mit Ihrem Modell geklickt haben? – hasan

Verwandte Themen