在reactjs中将复选框发布并放置到webapi

问题描述

我正在学习反应,我在无法解决的复选框中发现错误。我正在做一个模式来更新和插入.net核心Web API。 Web Api效果很好。在应用程序中,我找不到已检查的值,它始终会给我一个错误400。我尝试了几种方法,但不知道带有复选框的handlechange如何工作。我不知道有人可以帮我。谢谢!

桌子 SQl Server Table

import React,{ useState,useEffect} from 'react';
import 'bootstrap/dist/css/bootstrap.min.css';
import axios from 'axios';
import {Modal,ModalBody,ModalFooter,ModalHeader} from 'reactstrap';
import { useAlert } from 'react-alert';

//const Asistencia = () => {
function Asistencia() {
  const alert = useAlert();
  const baseUrl="https://localhost:44335/api/Asistencias";
  const [data,setData]=useState([]);
  const [modalModificar,setModalModificar]=useState(false);
  const [modalGuardar,setModalGuardar]=useState(false);
  const [moDaleliminar,setMoDaleliminar]=useState(false);
  const [AsistenciasSeleccionado,setAsistenciasSeleccionado]=useState({
    idAsistencia: '',dni: '',asistencia1: false,asistencia2: false,asistencia3: false,asistencia4: false,pagoMensual: '',pagoFecha: '',pagoRealizado: false,})

  const handleChange=e=>{
    const {name,value}=e.target;
    setAsistenciasSeleccionado({
      ...AsistenciasSeleccionado,[name]: value,});
    console.log(AsistenciasSeleccionado);
  }

  const abrirCerrarModalGuardar=()=>{
    setModalGuardar(!modalGuardar);
  }
  const abrirCerrarModalModificar=()=>{
    setModalModificar(!modalModificar);
  }
  const abrirCerrarMoDaleliminar=()=>{
    setMoDaleliminar(!moDaleliminar);
  }

  const peticionGet=async()=>{
    await axios.get(baseUrl)
    .then(response=>{
      setData(response.data);
    }).catch(error=>{
      console.log(error);
    })
  }

  const peticionPost=async()=>{
    delete AsistenciasSeleccionado.idAsistencia;
    AsistenciasSeleccionado.dni=parseInt(AsistenciasSeleccionado.dni);
    AsistenciasSeleccionado.pagoMensual=parseInt(AsistenciasSeleccionado.pagoMensual);
    await axios.post(baseUrl,AsistenciasSeleccionado)
    .then(response=>{
      setData(data.concat(response.data));
      abrirCerrarModalGuardar();
    }).catch(error=>{
      console.log(error);
    })
  }

  const peticionPut=async()=>{
    AsistenciasSeleccionado.dni=parseInt(AsistenciasSeleccionado.dni);
    AsistenciasSeleccionado.pagoMensual=parseInt(AsistenciasSeleccionado.pagoMensual);
    console.log(AsistenciasSeleccionado);
    await axios.put(baseUrl+"/"+AsistenciasSeleccionado.idAsistencia,AsistenciasSeleccionado)
    .then(response=>{
      var respuesta = response.data;
      var dataAuxiliar = data;
      dataAuxiliar.map(Asistencias=>{
        if(Asistencias.idAsistencia===AsistenciasSeleccionado.idAsistencia)
        {
          Asistencias.dni=respuesta.dni;
          Asistencias.asistencia1=respuesta.asistencia1;
          Asistencias.asistencia2=respuesta.asistencia2;
          Asistencias.asistencia3=respuesta.asistencia3;
          Asistencias.asistencia4=respuesta.asistencia4;
          Asistencias.pagoMensual=respuesta.pagoMensual;
          Asistencias.pagoFecha=respuesta.pagoFecha;
          Asistencias.pagoRealizado=respuesta.pagoRealizado;
        }
      });
      abrirCerrarModalModificar();
    }).catch(error=>{
      console.log(error);
    })
  }

  const peticionDelete=async()=>{
    await axios.delete(baseUrl+"/"+AsistenciasSeleccionado.idAsistencia)
    .then(response=>{
      setData(data.filter(Asistencias=>Asistencias.idAsistencia!==response.data));
      abrirCerrarMoDaleliminar();
    }).catch(error=>{
      console.log(error);
    })
  }
  const seleccionarasistencias=(Asistencias,caso)=>{
    setAsistenciasSeleccionado(Asistencias);
    (caso==="Modificar")?
    abrirCerrarModalModificar(): abrirCerrarMoDaleliminar();
  }

  useEffect(()=>{
    peticionGet();
  },[])

  return (
    <div className="Asistencia">
      <br/><br/>
      <button onClick={()=>abrirCerrarModalGuardar()} className="btn btn-success">Agregar Nueva Asistencia</button>
      <br/><br/>
      <table className="table table-bordered">
      <thead>
        <tr>
          <th>ID de Asistencia</th>
          <th>D.N.I.</th>
          <th>Asistencia día 1</th>
          <th>Asistencia día 2</th>
          <th>Asistencia día 3</th>
          <th>Asistencia día 4</th>
          <th>Monto Pagado</th>
          <th>Fecha de Pago</th>
          <th>Pago Efectuado</th>
          <th>Acciones</th>
        </tr>
      </thead>
      <tbody>
    {data.map(Asistencias=>(
      <tr key={Asistencias.idAsistencia}>
        <td>{Asistencias.idAsistencia}</td>
        <td>{Asistencias.dni}</td>
        <td>{Asistencias.asistencia1.toString()}</td>
        <td>{Asistencias.asistencia2.toString()}</td>
        <td>{Asistencias.asistencia3.toString()}</td>
        <td>{Asistencias.asistencia4.toString()}</td>
        <td>{Asistencias.pagoMensual}</td>
        <td>{Asistencias.pagoFecha}</td>
        <td>{Asistencias.pagoRealizado.toString()}</td>
        <td>
          <button className="btn btn-primary" onClick={()=>seleccionarasistencias(Asistencias,"Modificar")}>Modificar</button> {"  "}
          <button className="btn btn-danger" onClick={()=>seleccionarasistencias(Asistencias,"Eliminar")}>Eliminar</button>
        </td>
      </tr>
     ))}
    </tbody>
    </table>

    <Modal isOpen={modalGuardar}>
    <ModalHeader>Agregar Asistencia</ModalHeader>
    <ModalBody>
      <div className="form-group">
      <label for="dni">D.N.I.:</label>
        <br />
        <input type="number" name="dni" id="dni" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="asistencia1">Dia 1 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia1" id="asistencia1" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="asistencia2">Dia 2 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia2" id="asistencia2" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="asistencia3">Dia 3 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia3" id="asistencia3" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="asistencia4">Dia 4 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia4" id="asistencia4" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="pagoMensual">Pago Mensual:</label>
        <br />
        <input type="text" name="pagoMensual" id="pagoMensual" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="pagoFecha">Fecha de Pago:</label>
        <br />
        <input type="datetime-local" name="pagoFecha" id="pagoFecha" className="form-control" onChange={handleChange}></input>
        <br />
        <label for="pagoRealizado">Pago Efectuado:</label>
        <br />
        <input type="checkBox" name="pagoRealizado" id="pagoRealizado" className="form-control" onChange={handleChange}></input>
        <br />

      </div>

    </ModalBody>
    <ModalFooter>
      <button className="btn btn-primary" onClick={()=>peticionPost()}>Agregar</button>{"  "}
      <button className="btn btn-danger" onClick={()=>abrirCerrarModalGuardar()}>Cancelar</button>
    </ModalFooter>
    </Modal>
    
    <Modal isOpen={modalModificar}>
    <ModalHeader>Modificar Asistencia</ModalHeader>
    <ModalBody>
      <div className="form-group">
        <label for="idAsistencia">ID de Asistencia:</label>
        <br />
        <input type="text" name="idAsistencia" id="idAsistencia" className="form-control" readOnly value={AsistenciasSeleccionado && AsistenciasSeleccionado.idAsistencia }></input>
        <br />
        <label for="dni">D.N.I.:</label>
        <br />
        <input type="number" name="dni" id="dni" className="form-control" onChange={handleChange} value={AsistenciasSeleccionado && AsistenciasSeleccionado.dni}></input>
        <br />
        <label for="asistencia1">Dia 1 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia1" id="asistencia1" className="form-control" onChange={handleChange} checked={AsistenciasSeleccionado && AsistenciasSeleccionado.asistencia1}></input>
        <br />
        <label for="asistencia2">Dia 2 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia2" id="asistencia2" className="form-control" onChange={handleChange} checked={AsistenciasSeleccionado && AsistenciasSeleccionado.asistencia2}></input>
        <br />
        <label for="asistencia3">Dia 3 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia3" id="asistencia3" className="form-control" onChange={handleChange} checked={AsistenciasSeleccionado && AsistenciasSeleccionado.asistencia3}></input>
        <br />
        <label for="asistencia4">Dia 4 de Asistencia:</label>
        <br />
        <input type="checkBox" name="asistencia4" id="asistencia4" className="form-control" onChange={handleChange} checked={AsistenciasSeleccionado && AsistenciasSeleccionado.asistencia4}></input>
        <br />
        <label for="pagoMensual">Pago Mensual:</label>
        <br />
        <input type="text" name="pagoMensual" id="pagoMensual" className="form-control" onChange={handleChange} value={AsistenciasSeleccionado && AsistenciasSeleccionado.pagoMensual}></input>
        <br />
        <label for="pagoFecha">Fecha de Pago:</label>
        <br />
        <input type="datetime-local" name="pagoFecha" id="pagoFecha" className="form-control" onChange={handleChange} value={AsistenciasSeleccionado && AsistenciasSeleccionado.pagoFecha}></input>
        <br />
        <label for="pagoRealizado">Pago Efectuado:</label>
        <br />
        <input type="checkBox" name="pagoRealizado" id="pagoRealizado" className="form-control" onChange={handleChange} checked={AsistenciasSeleccionado && AsistenciasSeleccionado.pagoRealizado}></input>
        <br />

      </div>

    </ModalBody>
    <ModalFooter>
      <button className="btn btn-primary" onClick={()=>peticionPut()}>Modificar</button>{"   "}
      <button className="btn btn-danger" onClick={()=>abrirCerrarModalModificar()}>Cancelar</button>
    </ModalFooter>
    </Modal>

    <Modal isOpen={moDaleliminar}>
      <ModalBody>
        ¿Estas seguro que deseas eliminar la asistencia y pago al alumno con D.N.I. { AsistenciasSeleccionado && AsistenciasSeleccionado.dni}? 
      </ModalBody>
      <ModalFooter>
        <button className="btn btn-danger" onClick={()=>peticionDelete()}>
          Sí
        </button>
        <button
          className="btn btn-secondary"
          onClick={()=>abrirCerrarMoDaleliminar()}
        >
          No
        </button>
        </ModalFooter>
      </Modal>
    </div>
  );
}

export default Asistencia;

解决方法

您没有将任何值传递给handleChange函数,该函数需要'event'作为参数。

您应该像这样重写输入元素:

<input type="checkbox" name="asistencia1" value="YOUR VALUE HERE" id="asistencia1" className="form-control" onChange={(e) => handleChange(e)}></input>

在此处查看演示

https://codepen.io/willemruys/pen/OJXVBob