【发布时间】:2019-05-23 14:45:01
【问题描述】:
我有一家产品商店。 每个产品都有一个 ID、一个价格和一个名称。 当一个人点击“购买”按钮时,会打开一个表单,以便他们填写地址、电子邮件和姓名。 当用户点击提交时,我会向发送信息的控制器进行 AJAX 调用。
我尝试了几种解决方案,但找不到一个可行的解决方案:/ 我要做的是发送电子邮件、地址、姓名和一系列产品。
carrinho.js (shoppingcart.js):
function go(nr) {
$('.confirm').toggleClass('comein');
$('#shoppingCart').toggle("fade");
var i = 0;
$("div #cartItems > .itemrow").each(function () {
var nome = $(this).find("h3").text();
var preco = $(this).find(".price").text();
var id = $(this).find(".id").text();
$("#form").append("" +
"<input type='hidden' name='[" + i + "].produtos' value='" + nome + "' id='nomeenc' readonly /> " +
"<input type='hidden' name='[" + i + "].produtos' value='" + id + "' id='idenc' readonly />" +
"<input type='hidden' name='[" + i + "].produtos' value='" + preco + "' id='precoenc' readonly />");
$(".messageSuccess button .removeItem").remove();
$(".messageSuccess img").remove();
i = i + 1;
});
$("form").on("submit", function (e) {
e.preventDefault();
var form = $(this);
$.ajax({
type: 'POST',
url: '/Compra/Encomenda',
data: form.serialize(),
success: function () {
$('.confirm').toggleClass('comein');
$('#emptyCart').fadeToggle(nr);
$('.messageSuccess').toggleClass('comein');
}
});
});
}
控制器:
public ActionResult Encomenda(SubmitFormModel produtos)
{
var model = produtos;
string path = Server.MapPath("~/files");
DateTime time = DateTime.Now;
string date = time.ToString("yyyy-MM-dd-hh-mm-ss");
XmlSerializer serializer = new XmlSerializer(typeof(SubmitFormModel));
StreamWriter writer = new StreamWriter(path + "\\" + date + ".xml");
serializer.Serialize(writer, model);
writer.Close();
return PartialView(model);
}
SubmitFormModel.cs:
namespace Loja.Models
{
[Serializable]
public class SubmitFormModel
{
public List<Produto> Produtos { get; set; } //produto = product
public string Morada { get; set; } //address
public string Email { get; set; }
public string Nome { get; set; } //name
}
}
Produto.cs:
namespace Loja.Models
{
[Serializable]
public class Produto
{
public int Id { get; set; }
public string Nome_produto { get; set; } //product_name
public string Tipo { get; set; } //type
public string Detalhes { get; set; } //details
public string Imagem { get; set; } //image
public int Preco { get; set; } //price
public string ImgArt { get; set; }
}
}
表格:
<form action="/Compra/Encomenda" method="post" id="form">
<label class="field a-field a-field_a3 page__field">
<input class="field__input a-field__input" placeholder="ex. Rodrigo Barradinhas" required name="nome" type="text" id="nome_cliente">
<span class="a-field__label-wrap">
<span class="a-field__label">Nome completo</span>
</span>
</label>
<label class="field a-field a-field_a3 page__field">
<input class="field__input a-field__input" placeholder="ex. email@domain.com" required name="email" type="text" id="email">
<span class="a-field__label-wrap">
<span class="a-field__label">E-mail</span>
</span>
</label>
<label class="field a-field a-field_a3 page__field">
<input class="field__input a-field__input" placeholder="ex. Rua x Nºy 1167-004 Lisboa" required name="morada" type="text" id="morada">
<span class="a-field__label-wrap">
<span class="a-field__label">Morada</span>
</span>
</label>
<input type='submit' name='confirmar' value='confirmar' class='event' data-main='Compra' />
<br /><br />
</form>
我想进入我的控制器,例如: https://imgur.com/a/3woa1sy
还有一系列产品
【问题讨论】:
-
不应该是
name='produtos[" + i + "].name'而不是name='[" + i + "].produtos'吗?像您一样,每个属性只有一个输入,但name等于produtos[" + i + "].**propertyName**。 -
同样在
each方法中,您将相同的id设置为多个input,这不是一个好主意,因为ids应该是唯一的。如果您不需要它们,我建议您删除它们。 -
@colinD 关于 id,我已经删除了它们,那是从以前开始的,当我没有 foreach() 并且它是单个产品时
-
@colinD 我尝试了你的建议,这就是我得到的:imgur.com/a/WRwmgwP
-
它应该是
produtos[" + i + "].nome_produto而不是nome以匹配Produto模型,但奇怪的是,其他属性不再设置了。