как получить частичные данные в контроллере - PullRequest
1 голос
/ 17 июня 2011

Я использую 3 частичных просмотра в одном представлении, у меня есть кнопка отправки, при нажатии которой я хочу отправить информацию в базу данных, мне нужно получить данные из всех частичных видов. Можете ли вы предоставить мне правильную информацию, чтобы сделать это.

Дарин Я использую L2S, поэтому, когда я перетаскиваю свою хранимую процедуру, я получаю код, похожий на этот, в

                 [global::System.Data.Linq.Mapping.FunctionAttribute(Name="SP_Name")]
    public int SP_Name(
                [global::System.Data.Linq.Mapping.ParameterAttribute(Name="EmployeeID", DbType="Int")] System.Nullable<int> EmployeeID
{

      IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), EmployeeID);
        encounterID = ((System.Nullable<int>)(result.GetParameterValue(293)));
        return ((int)(result.ReturnValue));
    }
} 

Обновлено

   <script language="javascript" type="text/javascript">
    $(function () {
        $('#Form1').submit(function () {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (data) {
                    var message = data.Result;
                    $('#Result').html(message);

                }
            });
            return false;
        });
    });

</script>

В моем контроллере я использую

public ActionResult Index(FormCollection frm)
    {
     My Code ---------------------  
     return Json(new { Result = "Success" });
    }

Когда я возвращаю это, я получаю файл в посте обратно, и он просит меня сохранить его. Я проверил с помощью flidder, в URL он показывает, что путь как / только где, как если бы я заполнил какой-то конкретный частичный вид Это показывает что-то вроде / Имя контроллера / Частичное представление Можете ли вы помочь мне с этой проблемой

1 Ответ

2 голосов
/ 17 июня 2011

Что ж, отправка данных в действие контроллера обычно выполняется путем выполнения HTTP-запроса к этому действию контроллера. Существуют разные способы выполнения HTTP-запроса:

  1. Используйте тег <form>, указывающий на это действие
  2. Используйте AJAX

Таким образом, если вы выберете первый подход, у вас может быть один <form>, заключающий в себе все части, которые будут иметь несколько кнопок отправки (с разными именами). Затем, когда вы нажмете одну из кнопок отправки, все поля ввода будут отправлены в действие контроллера, а затем внутри действия контроллера вы сможете обработать данные, основанные на том, какая кнопка отправки была нажата.

Если вы используете второй вариант, то просто соберите значения, которые вам нужно отправить, нажав кнопку uipon и отправьте их вместе с запросом AJAX.


ОБНОВЛЕНИЕ:

Как и просили в разделе комментариев, вот как можно применить первый метод. Он использует две части вместо трех, но его можно легко экстраполировать.

Как всегда, вы начинаете с определения модели представления, которая будет представлять данные, с которыми вы хотели бы работать в этом конкретном представлении:

public class MyViewModel
{
    public Partial1ViewModel Model1 { get; set; }
    public Partial2ViewModel Model2 { get; set; }
}

public class Partial1ViewModel
{
    public string Foo { get; set; }
}

public class Partial2ViewModel
{
    public string Bar { get; set; }
}

Затем контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Model1 = new Partial1ViewModel { Foo = "foo" },
            Model2 = new Partial2ViewModel { Bar = "bar" },
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // Here you have access to model.Model1.Foo and model.Model2.Bar =>

        var button = "";
        if (!string.IsNullOrEmpty(Request["submit1"]))
        {
            // submit1 button was used
            button = "submit1";
        } 
        else if (!string.IsNullOrEmpty(Request["submit2"]))
        {
            // submit2 button was used
            button = "submit2";
        }

        var result = string.Format("thanks for submitting using {0}", button);
        return Content(result, "text/plain");
    }
}

, а затем основной вид (~/Views/Home/Index.cshtml):

@model MyViewModel

@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Model1)
    @Html.EditorFor(x => x.Model2)
}

и два соответствующих шаблона редактора (или частичные, если хотите):

~/Views/Home/EditorTemplates/Partial1ViewModel.cshtml

@model Partial1ViewModel
<h2>Partial 1</h2>
<div>
    @Html.LabelFor(x => x.Foo)
    @Html.EditorFor(x => x.Foo)
    <input type="submit" value="Submit me!" name="submit1" />
</div>

~/Views/Home/EditorTemplates/Partial2ViewModel.cshtml

@model Partial2ViewModel
<h2>Partial 2</h2>
<div>
    @Html.LabelFor(x => x.Bar)
    @Html.EditorFor(x => x.Bar)
    <input type="submit" value="Submit me!" name="submit2" />
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...