@if (Model.IsGiftCard)
{
using (Html.BeginForm("AddToCartProduct", "ShoppingCart", FormMethod.Post))
{
<div class="giftCard">
    @T("Products.GiftCard.Field.Fill")

    <dl>
        <dt>@Html.LabelFor(model => model.RecipientName):</dt>
        <dd>
            @Html.TextBoxFor(model => model.RecipientName)
        </dd>
        @if (Model.GiftCardType == Nop.Core.Domain.Catalog.GiftCardType.Virtual)
        {
        <dt>@Html.LabelFor(model => model.RecipientEmail): </dt>
        <dd>
            @Html.TextBoxFor(model => model.RecipientEmail)
        </dd>
        }

şeklinde devam eden form sayfam var ve bu formu post ettigimde

[HttpPost]
    [ValidateInput(false)]
    public JsonResult AddToCartProduct(AddToCartModel model, FormCollection form)
    {

metodunda yakalıyorum ancak form verilerinin hiçbiri gelmiyor. ancak breakpoint koyunca bu metoda düşüyo. Neden form verileri gelmez ki . Fikriniz var mı ?

soruldu: 04 Ara '13, 05:41

ibal90's gravatar image

ibal90
159333439
cevap kabul oranı: 18%

değiştirildi: 10 Ara '13, 09:45

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

AddToCartProduct(AddToCartModel model, FormCollection form) metodundaki, model ve form nesneleri null olarak mı geliyor? Formu nasıl post ediyorsunuz? Post ettiginiz AJAX kodları nerde?

(04 Ara '13, 06:36) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AddToCartModel nesnesi null gelmiyor. ama form nesnesi null geliyor.ajax kullanmadan post edemezmiyim ?

(04 Ara '13, 06:54) ibal90 ibal90's gravatar image

var model = { ProductId: productId, VariantId: variantId, Quantity: quantity, ShoppingCartType: shoppingCartType, Attributes: attributes };

$.ajax({
    type: "POST",
    url: _addToCartUrl,
    data: JSON.stringify(model),
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        UpdateCart(data);
    },
    beforeSend: function () { $('body').append('<div id="loading" style="position:fixed; top:0px;left:0px; width:100%; height:100%; z-index:1000; opacity:0.70; background: url(/_img/loading.gif) #f3f3f3 center center no-repeat; overflow:hidden; "></div>'); },
    complete: function () { $('div#loading').remove(); }

});
Ajax kodları bunlar.
(04 Ara '13, 07:01) ibal90 ibal90's gravatar image

Bu ajax kodunda form ile ilgili birşey yok. Nasıl yapmalıyız ki acaba?

(04 Ara '13, 07:06) ibal90 ibal90's gravatar image

AddToCartModel zaten sizin form nesnelerinizi tutuyor, FormCollection nesnesine neden ihtiyacınız var? Ajax kullanmadan da post edebilirsiniz tabi, ama controller action metodunu jsonResult olarak değilde, ActionResult döndürecek şekilde değiştirirsiniz.

(04 Ara '13, 07:06) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Mevcut formu ajax ile post etmek için formu serialize edip postalayabilirsiniz

$.ajax({
    url: _addToCartUrl,
    data: $('#form').serialize(),
    type: 'POST',
});
(04 Ara '13, 07:15) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Ajax kodunda form ile veri taşınmıyor. Actionresult yaptım return tipini yine null geldi form verisi. Aslında ajax ile json şeklinde taşımalıyım form verilerini. projeye uygun olan şekli bu.

(04 Ara '13, 07:17) ibal90 ibal90's gravatar image

yapmak istedigim şu; hediye kartı kategorisinde olan ürünlerin, ürün detay sayfasında alıcı kişinin maili adı mesajı vs. bulunuyor. Bu form verilerini almak istiyorum Diğer ürün çeşitlerinde böyle bi form yok.Kullandııgm framework un örnek sitesinde form kullanarak yapıyo ve diğer işlemler form parametresi üzerinden oldugu için form kullanmakta ısrarcı oldum.yoksa modele property eklemek de iyi çözüm olurdu.

Form un bulundugu partial view: @model Nop.Web.Models.Catalog.ProductModel.ProductVariantModel.GiftCardModel @if (Model.IsGiftCard) { using (Html.BeginForm("AddToCartProduct", "ShoppingCart", FormMethod.Post)) {

@T("Products.GiftCard.Field.Fill")

    <dl>
        <dt>@Html.LabelFor(model => model.RecipientName):</dt>
        <dd>
            @Html.TextBoxFor(model => model.RecipientName)
        </dd>
        @if (Model.GiftCardType == Nop.Core.Domain.Catalog.GiftCardType.Virtual)
        {
        <dt>@Html.LabelFor(model => model.RecipientEmail): </dt>
        <dd>
            @Html.TextBoxFor(model => model.RecipientEmail)
        </dd>
        }
        <dt>
            @Html.LabelFor(model => model.SenderName): </dt>
        <dd>
            @Html.TextBoxFor(model => model.SenderName)
        </dd>
        @if (Model.GiftCardType == Nop.Core.Domain.Catalog.GiftCardType.Virtual)
        {
        <dt>@Html.LabelFor(model => model.SenderEmail):</dt>
        <dd>
            @Html.TextBoxFor(model => model.SenderEmail)</dd>
        }
        <dt>
            @Html.LabelFor(model => model.Message): </dt>
        <dd>
            @Html.TextAreaFor(model => model.Message, new { style = "Width: 230px; Height: 100px;" })
        </dd>
    </dl>

</div>
}

}

Js tarafı ise: function AddToCart(container) {

var productId = $('input#productId').val();
var variantId = $('input#variantId').val();
var quantity = parseInt($('div#priceStock[variantId="' + variantId + '"] div.quantityRight div.selectBox li.on').text());
if (isNaN(quantity)) quantity = 1;
var shoppingCartType = 1;
var attributes = new Array();
$('div#productColorSize div.selectBox li.on[ownerVariantId="' + variantId + '"]').each(function f() {
    attributes.push({
        ProductVariantAttributeValueId: $(this).attr('valueId'),
        ProductAttributeId: $(this).closest('div.color').attr('attributeId')
    });
});
var model = {
    ProductId: productId,
    VariantId: variantId,
    Quantity: quantity,
    ShoppingCartType: shoppingCartType,
    Attributes: attributes
};

$.ajax({ type: "POST", url: _addToCartUrl, data: JSON.stringify(model), dataType: 'json', contentType: 'application/json; charset=utf-8', success: function (data) { UpdateCart(data); }, beforeSend: function () { $('body').append('<div id="loading" style="position:fixed; top:0px;left:0px; width:100%; height:100%; z-index:1000; opacity:0.70; background: url(/_img/loading.gif) #f3f3f3 center center no-repeat; overflow:hidden; "></div>'); }, complete: function () { $('div#loading').remove(); }

});

}

butona tıklandıgında da çalışan js : $('div#productAddToRight input.button1').not('.soldOut').click(function f(e) {e.stopPropagation(); AddToCart($(''));

(05 Ara '13, 00:52) ibal90 ibal90's gravatar image

data: JSON.stringify(model) şeklinde modeli data olarak gönderiyorsun ama senin action metodun iki parametre alıyor. javascript tarafındaki modeli düzenlemen gerekebilir. data:{model:{ProductId,....},form:JSON.stringify(form)} şeklinde.

(05 Ara '13, 04:43) ucuncubayram ucuncubayram's gravatar image
9 yorumdan 5 tanesi gösteriliyor hepsini göster

AddToCartProduct action metodunuza iki farklı parametre göndermişsiniz. Asıl yapmak istediğinizin ProductChart verilerini post etmek olduğunu anladım ve ona göre cevap veriyorum. Sizin MVC tarafındaki modeliniz şu şekilde olduğunu varsayalım:

public class AddToCartModel {
   public string RecipientName {get;set;}
   public string RecipientEmail {get;set;}
}

Action metodunuz da şu şekillde olmalı.

[HttpPost]
[ValidateInput(false)]
 public JsonResult AddToCartProduct(AddToCartModel model)

FormCollection eklememize gerek yok. ASP.NET MVC3 ile birlikte DefaultModelBinder sınıfı, JSON binding işlemini ayrı bir Binder sınıfı yazmamıza gerek kalmadan hallediyor.

Geriye kalan kısım ise javascript tarafından POST işlemi.

var data = {"RecipientName":"myname","RecipientEmail":"email"}
$.ajax({
    type: "POST",
    url: "/controller/action",
    data: data,
    success: function (data) {
        console.log("işlem tamam");
    }
})

data içerisindeki RecipientName ve RecipientEmail doğru yazıldığında DefaultModelBinder data verilerini otomatik olarak AddToCartModel tipine dönüştürür. Gün içinde yaptığım bir uygulamada böyle bir işlem yaptım ve sorunsuz çalıştı.

permanent link

cevaplandı: 04 Ara '13, 11:55

ucuncubayram's gravatar image

ucuncubayram
1.4k122840
cevap kabul oranı: 11%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×81
×1

Soruldu: 04 Ara '13, 05:41

Görüntüleme: 790 kez

Son güncelleme: 10 Ara '13, 09:45

powered by BitNami OSQA