передайте модель из вида в контроллер с помощью html.actionlink панели

Я пытаюсь получить данные модели из строго типизированного представления в контроллер. С помощью кнопки "отправить" все в порядке, я могу получить данные. Теперь я хочу добиться того же с 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

2 ответов


форма может быть размещена только с помощью кнопки Отправить URL-адрес, заданный его атрибутом действия.

однако вы можете отправить данные формы на другой URL-адрес с помощью метода jQuery post, вручную проверяя форму перед ее отправкой. Таким образом, вы можете отправить данные формы в метод контроллера PreviewWordDocument и обработать ответ, чтобы показать предварительный просмотр в нужном div. (Будет полезно, если вы дадите идентификатор форме, чтобы вы могли легко найти его, используя jQuery)

таким образом, ваш обработчик событий click для ссылки предварительного просмотра будет выглядеть следующим образом:

$("#previewLink").click(function(e) {
    e.preventDefault();
    if($("#YourFormId").valid()){
        $("#dialogcontainer").dialog('open');
    }
});

в функции open диалогового окна вы опубликуете форму (которая уже была проверена) в методе preview controller, используя функцию 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);
} 

на HTML-странице при нажатии на кнопку отправки все элементы ввода внутри формы, в которой находится кнопка отправки, будут отправлены на сервер, но при нажатии на якорь (<a> tag). вы отправляете запрос только с помощью метода Get и без учета какого-либо значения.но если вы хотите отправить определенное значение на сервер с помощью этого подхода, вы можете сделать это по строке запроса.вы использовали следующее, Чтобы сделать запрос:

     @Html.ActionLink("Preview", "PreviewWordDocument", "Home", null, 
     new { id = "previewLink" })

это даст :

<a id="previewLink" href="/Home/PreviewWordDocument"> Preview </a>

что неверно.передать любое значение на сервер с помощью ActionLink используйте 4-й параметр следующим образом:

     @Html.ActionLink("Preview", "PreviewWordDocument", "Home",
     new { id = "previewLink" }, null)

результатом этого кода будет:

 <a href="/Home/PreviewWordDocument?id=previewLink"> Preview </a>

ура!