IN MVC6 return Json(rows, JsonRequestBehavior.AllowGet) ISSUE - asp.net-core-mvc

IN MVC6 return Json(rows, JsonRequestBehavior.AllowGet); method is changed and not allowing to set JsonrequestBehavior. What is alternative in MVC6

That overload of Json method which takes JsonRequestBehavior does not exist in the aspnet core any more.
You can simply call the Json method with the object data you want to send back.
public IActionResult GetJsonData()
{
var rows = new List<string> { "Item 1","Item 2" };
return Json(rows);
}
Or even
public IList<string> GetJsonData()
{
var rows = new List<string> {"aa", "bb" };
return rows;
}
or using Ok method and having IActionResult as the return type.
public IActionResult GetJsonData()
{
var rows = new List<string> { "aa", "bb" };
return Ok(rows);
}
and let the content negotiator return the data in the requested format(via Accept header). The default format used by ASP.NET Core MVC is JSON. So if you are not explicitly requesting another format(ex :application/xml), you will get json response.

Try this
[HttpGet]
public JsonResult List()
{
var settings = new JsonSerializerSettings();
return Json(rows, settings);
}

Try this
public JsonResult GetJsonData()
{
var data= //your list values
return Json(data);
}

JsonRequestBehavior is deprecated from ASP.net core 1. Just use return Json();

Related

Make IFormFile function to work with model

I have a function in my controller that takes a file sent by an ajax call and saves it to a specified path. I was wondering how I could make this work with a model instead as I am hoping to send more data than just the image.
ViewModel:
public class PhotoViewModel
{
// Other strings
public IFormFile userimage { get; set; }
}
Controller: Without model (working)
[HttpPost]
public async Task<IActionResult> Post(IFormFile file)
{
var filePath = Path.GetFullPath(#"C:\Users\me\documents\" + file.FileName);
if (file.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return StatusCode(200);
}
Attempt at Version with Model:
[HttpPost]
public async Task<IActionResult> PhotoData(PhotoViewModel model)
{
var filePath = Path.GetFullPath(#"C:\Users\me\documents\" + model.userimage.FileName);
if (ModelState.IsValid)
{
if (model.userimage.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await model.userimage.CopyToAsync(stream);
}
}
}
return StatusCode(200);
}
This attempt doesn't get me far. By setting a breakpoint I can see it fails at setting the filePath but I'm not sure how to work with the model. Any help is appreciated.
What is the error message you are getting and what is the client side code you are using to send the API request?
You will have to use a FormData object and fill the FormData object with the required properties.
var formData = new FormData();
formData.append(add PhotoViewModel properties)
formData.append(userimage, <file>);

How do I return specific string value from webapi?

I want to return following JSON, but I missed the syntax. How can I correct it?
In my HomeController.cs,
If (result.IsUserActive) return JSON { “UserStatus” : “Active” }
How can I return value “UserStatus” : “Active” In Get method of webapi?
It must be like something:
[HttpGet]
public IHttpActionResult GetUserStatus(int id)
{
var result = GetStatus(id);
if (result.IsUserActive)
{
return json ({ “UserStatus” : “Active” });
}
You can simply return the Json like:
var result = new {UserStatus="Active" };
return Ok(result);

How to convert LINQ result to JSON and pass it to View in MVC3

In my controller i have the following code
public ActionResult
{
var roomdetails = db.RoomDetails.Include(r => r.RoomType).Include(r => r.FloorNames);
roomdetails = roomdetails.OrderByDescending(s => s.FloorNames.FloorName);
return View(roomdetails.ToList());
}
But i want to send the roomdetails as json object so that i can use jquery to catch the request and do further dynamic processing in my View.So how to convert roomdetails to json object.Please help me...
Note: Use Newtonsoft.Json.dll version 8.0.2
return an instance of this class to your controller method.
public class ActionResult_Json : System.Web.Mvc.ActionResult
{
public object To_Serialize_Object { get; set; }
public ActionResult_Json(object To_Serialize_Object)
{
this.To_Serialize_Object = To_Serialize_Object;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ContentType = "application/json";
//serialize object to string
string Serialized_Object_String = Newtonsoft.Json.JsonConvert.SerializeObject(To_Serialize_Object, new Newtonsoft.Json.JsonSerializerSettings()
{
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
});
//write json to response stream
context.HttpContext.Response.Write(Serialized_Object_String);
}
}
Just return a JsonResult:
public JsonResult Index()
{
var roomdetails = db.RoomDetails.Include(r => r.RoomType).Include(r => r.FloorNames)
.OrderByDescending(s => s.FloorNames.FloorName);
return Json(roomdetails.ToList(), JsonRequestBehavior.AllowGet);
}
You would need your jquery to process the json in the way that you want and display what you want. Typically this works well if it's called from your view via ajax.
#{
ViewBag.Title = "Index";
}
Reception
$(document).ready(function () {
$.getJSON('/Reception/Index1', function (data) {
console.log(data);
if (data.success) {
alert("hai");
//ShowStockQuote(data);
}
else {
alert("faliure");
}
});
});
#Html.ActionLink("Create New", "Create")
You may try this.
public JsonResult Index()
{
var roomdetails = db.RoomDetails.Include(r => r.RoomType).Include(r => r.FloorNames);
roomdetails = roomdetails.OrderByDescending(s => s.FloorNames.FloorName);
return Json(roomdetails.ToArray(), JsonRequestBehavior.AllowGet);
}

How to return IEnumerable values with using ajax in MVC3?

How can I return IEnumerable's values with using ajax. Here is my script:
$.ajax({
type: "get", url: "street", data: { a: value2 },
success: function (data) {
alert(data);
}
And here is my controller method:
[HttpGet]
public string street(string a)
{
EmlakServicesClient client = new EmlakServicesClient();
client.ClientCredentials.UserName.UserName = "service_test";
client.ClientCredentials.UserName.Password = "..";
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
Street[] list =client.GetStreet(Convert.ToInt32(a));
return ("" + list.FirstOrDefault().StreetName);
}
As you can see at top I get value but with First Value so how can I get these all values from IEnumarable?
You should use JSON:
return Json(list, JsonRequestBehavior.AllowGet);
You will need to change your action method to return ActionResult.
return the Collection as JSON
public ActionResult GetsomeItems(int someId)
{
var someCollection=GetListOfItemsFromSomeWhere(someId)
return Json(someCollection,JsonRequestBehaviour.AllowGet);
}
I tripped over this while doing a Google search on how to return JSON results using ASP.NET Web API 2. In case someone else is looking for the same solution, here is the solution that worked for me:
// GET: api/Users
public HttpResponseMessage Get()
{
var users = UserManager.Get(); // returns IEnumerable
return Request.CreateResponse(HttpStatusCode.OK, users);
}
You can learn more about HttpResponseMessage here.

Returning Multiple partial views from single Controller action?

I need to update Multiple from an Ajax call , I am confused as in how to return these Multiple views from the Controller Action method.
You can only return one value from a function so you can't return multiple partials from one action method.
If you are trying to return two models to one view, create a view model that contains both of the models that you want to send, and make your view's model the new ViewModel.
E.g.
Your view model would look like:
public class ChartAndListViewModel
{
public List<ChartItem> ChartItems {get; set;};
public List<ListItem> ListItems {get; set;};
}
Then your controller action would be:
public ActionResult ChartList()
{
var model = new ChartAndListViewModel();
model.ChartItems = _db.getChartItems();
model.ListItems = _db.getListItems();
return View(model);
}
And finally your view would be:
#model Application.ViewModels.ChartAndListViewModel
<h2>Blah</h2>
#Html.RenderPartial("ChartPartialName", model.ChartItems);
#Html.RenderPartial("ListPartialName", model.ListItems);
There is a very good example here....
http://rhamesconsulting.com/2014/10/27/mvc-updating-multiple-partial-views-from-a-single-ajax-action/
Create a helper method to package up the partial view...
public static string RenderRazorViewToString(ControllerContext controllerContext,
string viewName, object model)
{
controllerContext.Controller.ViewData.Model = model;
using (var stringWriter = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
var viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, stringWriter);
viewResult.View.Render(viewContext, stringWriter);
viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
return stringWriter.GetStringBuilder().ToString();
}
}
Create a controller action to bundle the multiple partial views....
[HttpPost]
public JsonResult GetResults(int someExampleInput)
{
MyResultsModel model = CalculateOutputData(someExampleInput);
var totalValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_TotalValues", model.TotalValuesModel);
var summaryValuesPartialView = RenderRazorViewToString(this.ControllerContext, "_SummaryValues", model.SummaryValuesModel);
return Json(new { totalValuesPartialView, summaryValuesPartialView });
}
Each partial view can use its own model if required or can be bundled into the same model as in this example.
Then use an AJAX call to update all the sections in one go:
$('#getResults').on('click', function () {
$.ajax({
type: 'POST',
url: "/MyController/GetResults",
dataType: 'json',
data: {
someExampleInput: 10
},
success: function (result) {
if (result != null) {
$("#totalValuesPartialView").html(result.totalValuesPartialView);
$("#summaryValuesPartialView").html(result.summaryValuesPartialView);
} else {
alert('Error getting data.');
}
},
error: function () {
alert('Error getting data.');
}
});
});
If you want to use this method for a GET request, you need to remove the [HttpPost] decorator and add JsonRequestBehavior.AllowGet to the returned JsonResult:
return Json(new { totalValuesPartialView, summaryValuesPartialView }, JsonRequestBehavior.AllowGet);
Maybe this solution can help you:
http://www.codeproject.com/Tips/712187/Returning-More-Views-in-an-ASP-NET-MVC-Action

Resources