Tank you for your prompt reply. This controller works fine for me on SfGrid.
This is my controller.
public class PacienteViewController : ODataController
{
private readonly saeeContext db;
private readonly IMapper _mapper;
public PacienteViewController(saeeContext context, IMapper mapper)
{
db = context;
_mapper = mapper;
}
[AcceptVerbs("GET")]
public async Task<IQueryable<PacienteView>> Get(ODataQueryOptions opts)
{
if (User.IsInRole("Administradores"))
{
var pacienteList = await db.Pacientes.ToListAsync();
var result = _mapper.Map<IEnumerable<PacienteView>>(pacienteList);
var query = result.AsQueryable();
if (opts.OrderBy != null)
query = opts.OrderBy.ApplyTo(query);
var request = opts.Request.Query;
string search = request["$search"];
if (!string.IsNullOrWhiteSpace(search))
{
string lastWord = search.Split("OR ").Last();
Int32.TryParse(lastWord, out int j);
query = query.Where(x => ((x.Nombre + " " + x.Apellido).Contains(lastWord, StringComparison.OrdinalIgnoreCase)) || x.IdPaciente==j);
}
return query;
}
return null;
}
// POST: odata/EventDatas
[AcceptVerbs("POST", "OPTIONS")]
public void Post([FromBody]PacienteView newPaciente)
{
if (User.IsInRole("Administradores"))
{
var result = _mapper.Map<Paciente>(newPaciente);
db.Pacientes.Add(result);
db.SaveChanges();
}
}
[AcceptVerbs("PATCH", "MERGE", "OPTIONS")]
public void Patch(int key,[FromBody]Delta<PacienteView> patchPaciente)
{
if (User.IsInRole("Administradores"))
{
var personDatabase = db.Pacientes.Find(key);
var personDTO = _mapper.Map<PacienteView>(personDatabase);
patchPaciente.Patch(personDTO);
_mapper.Map(personDTO, personDatabase);
db.Update(personDatabase);
db.SaveChanges();
}
}
return null:
}
}
}
I also add my grid datamanger that works well
<SfDataManager Url="http://localhost:5011/odata/PacienteView" Adaptor="Adaptors.ODataV4Adaptor"></SfDataManager>
Again thank you very much for your reply, I hope you can help me.