Fermin
Fermin

Reputation: 36111

Accessing ASP.NET MVC model data from with Javascript

I have a strongly typed View that accepts a Customer model, this customer model is a LINQ2SQL partial class that has a property called Journeys which returns all Journeys that are associated with this Customer.

I was wondering if it would be possible to access the Customer.Journeys property as a JSON object from within the Javascript.

Is this possible? If so how would I go about accessing it? Would I be best to create a FormViewModel and store the Customer details and Journey details as a JSON object there and pass it to the javascript function using something like:

<% MyJavascriptFunction(Model.JSONJourneys) %>

Or should I alter the Journeys partial class and add a .ToJson() property? Or something completely different?

Thanks.

Upvotes: 2

Views: 8272

Answers (3)

kmk
kmk

Reputation: 613

This question has long been answered (and accepted), but I wanted to pass along a response to a similar question that helped me. His answer takes advantage of MVC3/Razor syntax:

https://stackoverflow.com/a/7486214/249153:

In mvc3 with razor @Html.Raw(Json.Encode(object)) seems to do the trick.

Upvotes: 2

Richard
Richard

Reputation: 22036

I would do this:

Using NewtonSoft Json Library, you can convert any C# model object to Json at the client end

http://james.newtonking.com/pages/json-net.aspx

in the view

<script>

var jsobject = <%= JsonConvert.SerializeObject(Model.Journeys) %>;

function myfunction (){ 
  //work with object

}

</script>

Upvotes: 7

Tamas Czinege
Tamas Czinege

Reputation: 121444

How about exposing your Customer model through a Javascript view and loading it as a regular javascript file in your HTML?

Like this:

In your HTML view:

<script type="text/javascript" src="/customers/123/json">

And in your controller:

public ActionResult CustomerJson(int customerId)
{
   var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
   var customer = Customer.Get(customerId);
   var serializedCustomer = serializer.Serialize(customer);
   return JavaScript(
      "function getCustomer() { return (" + serializedCustomer + "); }");
}

Upvotes: 2

Related Questions