我正在尝试将模型数据从强类型视图获取到控制器。 使用提交按钮是可以的,我可以获取数据。现在我想用html.actionlink实现相同的功能。 这就是我所拥有的: 查看:
@model WordAutomation.Models.Document
@{
ViewBag.Title = "Document";
}
<script type="text/javascript">
$(function () {
$("#dialog").dialog();
});
</script>
<h2>Document</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Document</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ClientTitle)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ClientTitle)
@Html.ValidationMessageFor(model => model.ClientTitle)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ClientFullName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ClientFullName)
@Html.ValidationMessageFor(model => model.ClientFullName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ClientCustomSSN)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ClientCustomSSN)
@Html.ValidationMessageFor(model => model.ClientCustomSSN)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Preview", "PreviewWordDocument", "Home", null, new { id = "previewLink" })
</div>
<div id="dialogcontainer">
<div id="dialogcontent"><input type="submit" value="Create" /> </div>
</div>
@section Scripts {
<script type="text/javascript">
$(document).ready(function() {
$("#dialogcontainer").dialog({
width: 400,
autoOpen:false,
resizable: false,
title: 'Test dialog',
open: function (event, ui) {
$("#dialogcontent").load("@Url.Action("PreviewWordDocument", "Home")");
},
buttons: {
"Close": function () {
$(this).dialog("close");
}
}
});
$("#previewLink").click(function(e) {
e.preventDefault();
$("#dialogcontainer").dialog('open');
});
});
</script>
}
控制器:
public ActionResult Document()
{
return View();
}
[HttpPost]
public ActionResult Document(WordAutomation.Models.Document model)
{
Models.Utility.EditWord word = new Models.Utility.EditWord();
word.EditWordDoc(model);
return View("Display", model);
}
public ActionResult PreviewWordDocument()
{
var image = Url.Content("~/Content/preview.jpeg");
return PartialView((object)image);
}
文档actionresult可以获取模型,但我想知道如何从actionlink获取将触发PreviewWordDocument操作的值。
提前致谢,Laziale
答案 0 :(得分:5)
表单只能使用提交按钮发布到其操作属性指定的URL。
然而,您可以使用jQuery post方法将表单数据发送到不同的URL,在发送之前手动验证表单。 这样,您可以将表单数据发送到PreviewWordDocument控制器方法并处理响应,以便在所需的div中显示预览。 (如果您为表单提供id,将会很有帮助,因此您可以使用jQuery轻松找到它)
因此预览链接的点击事件处理程序如下所示:
$("#previewLink").click(function(e) {
e.preventDefault();
if($("#YourFormId").valid()){
$("#dialogcontainer").dialog('open');
}
});
在对话框的open函数中,您将使用jQuery ajax函数将表单(已经过验证)发布到预览控制器方法。响应将加载到dialogContent div:
$.ajax({
type: "POST",
url: $("#previewLink").attr("href"), //the preview controller method
data: $("#YourFormId").serialize(),
success: function (data) {
//load ajax response into the dialogContent div
$("#dialogcontent").html(data);
},
error: function(xhr, error) {
$("#YourFormId").prepend('<div id="ajaxErrors"></div>')
.html(xhr.responseText);
}
});
现在,您现在可以在PreviewWordDocument操作中接收整个文档:
public ActionResult PreviewWordDocument(WordAutomation.Models.Document model)
{
var image = Url.Content("~/Content/preview.jpeg");
return PartialView((object)image);
}
答案 1 :(得分:4)
在HTML页面中,当您单击提交按钮时,提交按钮所在的表单内的所有输入元素将发布到服务器,但是当您单击锚点(<a>
标记)时。您只使用Get方法发送请求而不发布任何值。但是如果您想通过此方法向服务器发送特定值,则可以通过查询字符串来执行此操作。您已使用以下方式发出请求:
@Html.ActionLink("Preview", "PreviewWordDocument", "Home", null,
new { id = "previewLink" })
这会产生:
<a id="previewLink" href="/Home/PreviewWordDocument"> Preview </a>
这是不正确的。使用ActionLink
将任何值传递给服务器,使用第四个参数,如下所示:
@Html.ActionLink("Preview", "PreviewWordDocument", "Home",
new { id = "previewLink" }, null)
此代码的结果将是:
<a href="/Home/PreviewWordDocument?id=previewLink"> Preview </a>
喝彩!