2010-06-21 6 views
0

Вопрос здесь очень простойКак получить доступ к модели в JQuery

Это мой взгляд

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<GetmoreRevamp.BAL.Product>" %> 
<link href="<%=Url.Content("~/Content/AddToCart.css")%>" rel="stylesheet" 
     type="text/css" /> 
<link href="<%=Url.Content("~/Scripts/jquery-1.4.1.js")%>" type="text/javascript" /> 

<script type="text/javascript"> 
    function submitForm(formData) { 
     var tdata = $(formData).serialize(); 
     $.ajax({ 
      type: "POST", 
      url: '<%= Url.Action("AddToCart","Cart")%>', 
      data: tdata, 
      contentType: 'application/json; charset=utf-8', 
      datatype: "json", 
      success: function(result) { success(result); } 
     }); 
     return false; 
    } 
    function success(result) { 
     alert("success:" + result.success); 
    } 
</script> 

<% using (Html.BeginForm("AddToCart", "Cart ", Model, FormMethod.Post, 
      new { onsubmit = "return submitForm('this');" })) {%> 
<div class="prishosbtn"> 
    <a rel="prettyPhoto" href="" id="buy"> 
     <%Response.Write("<input type=\"image\" class=\"imgClass\" alt=\"" + 
         (Model != null && Model.ProductName != null ? 
             Model.ProductName : "KOEB") + "\" src=\"" + 
         Url.Content("~/pics/undersider/listevisning/kob-knap.png") + 
          "\" id=\"ImageButton\" name=\"ImageButton\" />");%> 
    </a> 
</div> 
<%}%> 

Это мой контроллер

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using GetmoreRevamp.WEB.Models; 
using GetmoreRevamp.WEB.Models.BLLModels; 
using System.Web.Security; 
using System.Security.Principal; 
using GetmoreRevamp.WEB.Utilities; 
using GetmoreRevamp.BAL; 

namespace GetmoreRevamp.WEB.Controllers 
{ 
    public class CartController : Controller 
    { 
     // 
     // GET: /Cart/ 
     public ActionResult Index() 
     { 
      return View("Cart"); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult AddToCart(Product product) 
     { 
      JsonResult result = new JsonResult(); 
      OrderHeader orderHeader = 
       Session[Constants.CurrentlySessionOrderHeader] as OrderHeader; 
      if (orderHeader == null) 
      { 
       orderHeader = new OrderHeader(); 
      } 
      if (product != null && product.ProductGuid != null && 
       string.Equals(product.ProductGuid, string.Empty)) 
      { 
       orderHeader.AddOrderLineItem(1, product); 
       orderHeader.Calculate(); 
       Session[Constants.CurrentlySessionOrderHeader] = orderHeader; 
       //Default redirection Must be changed when actual view is created 
       result.Data = true; 
      } 
      else 
      { 
       //Default redirection Must be changed when actual view is created 
       result.Data = false; 
      } 
      return result; 
     } 
    } 
} 

«Продукт» определяется в БАЛ. Продукт содержит другие бизнес-единицы. То, что я просто хочу сделать, - это получить доступ к модели, с которой объект привязан в jquery, а затем отправить его в мой метод действий в контроллере корзины. Я не хочу публиковать идентификатор продукта. Я хочу опубликовать фактическую модель через jquery для моего метода действий. В этом я новичок. так что любая помощь и наиболее имп простое решение будет предпочтительнее

ответ

0

MVC соответствует имена полей бизнес-объекта в методе действия, так что если продукт имеет поле ProductID, должно быть:

Html.TextBox("ProductID") 

декларация, или использовать метод TextBoxFor в MVC 2. Я уверен, что все еще работает, даже при публикации с помощью JQuery. Модельное связующее обрабатывает процесс ввода полей формы и передачи их объекту продукта. Но все поля должны быть в форме, которую вы отправляете на сервер, или вам нужно явно передать параметры, в которых вы передаете переменную tdata ...

HTH.

+0

Брайан мой вопрос в том, что в jquery, как я могу получить фактический объект модели, с которым связано представление. Предположим, что существует строго типизированное представление a с классом модели b. теперь мы можем отображать или редактировать поля экземпляра b через элементы html в a. которая прямолинейна. Если метод действия d contoller c принимает b как параметр, мы можем отправить обратно/перенаправить/получить этот метод действия. Это легко. Мой сценарий - это бит расширения. Поскольку a отправляет экземпляр от b до d в качестве параметра, он означает, что он либо сохранил в нем экземпляр b, либо знает, как создать экземпляр b (cont) –

+0

(Продолжая предыдущий) из доступной ему информации. То, что я хочу сделать, - это получить доступ к этому экземпляру b в jquery внутри сериализации, если это необходимо, а затем передать его через json в метод действия в любом контоллере, который принимает экземпляр b в качестве параметра. –

+0

Я пытаюсь сказать, что процесс привязки модели не публикует объект при использовании какого-либо подхода. Он помещает поля объекта на сервер. На сервере процесс привязки модели использует отражение в соответствии с текстовым полем с именем ProductID с идентификатором продукта свойства объекта, хранящегося в ссылке на модель. MVC фактически имеет гибкую архитектуру привязки, так как она также может работать с вложенными объектами. У вас всегда есть возможность принять форму FormCollection в качестве параметра метода действия, а затем использовать TryUpdateModel для перемещения значений к объекту. –

Смежные вопросы