【发布时间】:2017-09-04 15:08:43
【问题描述】:
我在共享布局中有一个下拉菜单,其中有一个选项称为“给我发邮件”。 一旦按下“给我发邮件”,就会出现一个弹出模式,其中可以填写邮件、号码和消息。
问题/挑战:似乎没有任何东西(viewModel)从我的共享布局 .cshtml 上的 javascript 传递到后端。我想首先将我的值正确传递给控制器,以便我可以将信息写入文件,然后我可以查看并联系填写框中的任何人。
模式代码`
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4><span class="glyphicon glyphicon-lock"></span> Kontakt</h4>
</div>
<div class="modal-body">
<form role="form">
<div class="form-group">
<label for="telefonnummer"><span class="glyphicon glyphicon-earphone"></span> Telefonnummer</label>
<input type="number" class="form-control" id="telefonnummer" placeholder="Ange telefonnummer">
</div>
<div class="form-group">
<label for="email"><span class="glyphicon glyphicon-envelope"></span> Email</label>
<input type="text" class="form-control" id="email" placeholder="Ange email">
</div>
<div class="form-group">
<label for="meddelande"><span class="glyphicon glyphicon-pencil"></span> Meddelande</label>
<input type="text" class="form-control" style="height:50px" id="meddelande" placeholder="Ange meddelande">
</div>
<button type="submit" class="btn btn-block" onclick="SkickaMail()">
Skicka
<span class="glyphicon glyphicon-ok"></span>
</button>
</form>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger btn-default pull-left" data-dismiss="modal">
<span class="glyphicon glyphicon-remove"></span> Avbryt
</button>
@*<p>Need <a href="#">help?</a></p>*@
</div>
</div>
</div>
</div>`
“SickaMail”应该调用 Javascript 并发送一个 viewModel。 假设将 val:s 发送到控制器页面 PeopleController 和 IactionResult Kontakt,但没有任何东西传递给控制器,当我在控制器中调试时,vals 为空。 代码如下
<script>
//DEN HÄR DELEN FUNKAR INTE, VÄRDENA SKICKAS INTE KORREKT TILL CONTROLLERN AV NÅGON ANLEDNING.
function SkickaMail() {
var dataX = {
//.val()metoden nedan är jQuery
"@nameof(MVCrepetition.Models.ViewModels.Mail.TelNummer)": $("#@nameof(Model.TelNummer)").val(),
"@nameof(MVCrepetition.Models.ViewModels.Mail.EMail)": $("#@nameof(Model.EMail)").val(),
"@nameof(MVCrepetition.Models.ViewModels.Mail.Meddelande)": $("#@nameof(Model.Meddelande)").val()
}
$.post("/Kontakt", dataX, function (json) {
})
}
</script>
控制器代码:
[HttpPost]
public IActionResult Kontakt(Mail viewModel)
{
Mail mail = new Mail();
mail.TelNummer = viewModel.TelNummer;
mail.EMail = viewModel.EMail;
mail.Meddelande = viewModel.Meddelande;
System.IO.File.WriteAllText(@"c:\Users\Administrator\Desktop\LiveTradingProject\mailfromcontact.json", JsonConvert.SerializeObject(mail));
//using (StreamWriter file = File.CreateText(@"c:\movie.json"))
// {
// JsonSerializer serializer = new JsonSerializer();
// serializer.Serialize(file, movie);
// }
return null;
}
我在服务器端打断点,但 viewModels 的值都是空的 enter image description here
【问题讨论】:
-
我认为您没有提供足够的信息。其余的代码在哪里?我们还需要查看控制器。编辑:第二个 sn-p 中存在复制/粘贴错误。
-
我认为你应该做
onclick="return SkickaMail()",并在你的js函数末尾加上return false。 -
dataX 中的名称-值对看起来很奇怪。你想在那里实现什么?我不熟悉 @ 和 #... nameof 的所有语法看起来像一个服务器端方法...您是否希望这些字符串在服务器端得到评估?我们需要看看你在服务器上对这些字符串做了什么。
-
@Shyju 你可能是对的——我也想在成功回调中看到一个空方法以外的东西,但我认为这不是他的问题的原因——从描述中,听起来他能够成功地在服务器上打断点,但是 dataX 是空的。
-
他的代码很好(构建对象)。只需添加一个
console.log(dataX)即可看到obj。
标签: javascript asp.net-mvc model-view-controller viewmodel