2017-01-27 20 views
1

Мне было предложено работать над проектом ASP.Net WebForms, и я хочу использовать ModelBinding, как в ASP.Net MVC.ASP.Net привязка модели - WebForms

У меня возникли проблемы с тем, чтобы это сработало и мне хотелось бы помочь, если это возможно.

Если я хочу привязать модель к объектам в форме, мне нужно сделать это в FormView, GridView и т. Д., Но в этом случае я хочу использовать FormView.

Этот код является упрощенной версией того, с чем я работаю, но имеет отношение к каждому из них.

<asp:FormView runat="server" ID="frmMain" ItemType="WebFormsModelBinding.TestModel" SelectMethod="TestBinding_select" > 
    <ItemTemplate> 
     <asp:TextBox runat="server" ID="txtName" Text="<%#: BindItem.Name %>" /> 
     <br/> 
     <asp:TextBox runat="server" id="txtAge" Text=" <%#: BindItem.Age %>" /> 

    </ItemTemplate> 

</asp:FormView> 
<asp:Button runat="server" id="bttnInsert" Text="button"/> 

У меня есть сценарий JQuery, который пытается передать данные обратно в модель, но я продолжаю получать Internal 500 Ошибки

$(document).ready(function() { 

     $("#MainContent_bttnInsert") 
      .click(function() { 


       var params = { 
        Name: "Dave", 
        Age: 55 
       } 

       $.ajax({ 
        type: "POST", 
        url: "default.aspx/TestBinding", 
        data: JSON.stringify(params), 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        //success: function (data) { 
        success: function() { 
         alert("it worked"); 
         return false; 

        }, 
        error: function (data) { 

         console.log(data); 
         alert("didnt work"); 
        } 
       }); 
       return false; 
      }); 
    }) 

Это должно поразить этот код на странице по умолчанию

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [System.Web.Services.WebMethod] 
    public static bool TestBinding(TestModel model) 
    { 

     return true; 
    } 

    public TestModel TestBinding_select() 
    { 
     var model = new TestModel 
     { 
      Name = "Simon", 
      Age = 33 
     }; 

     return model; 
    } 
} 

public class TestModel 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 

} 

Проблемы, которые возникают у меня, это то, что, поскольку я не могу использовать ActionResult, мне нужно объявить другой тип объекта как возвращаемый тип. В этом примере я выбрал bool и нет особых причин для этого.

Чтобы попасть в WebMethod, мне нужно сделать метод статическим.

ошибка, что я получаю

«Неверный вызов веб-службы, отсутствует значение параметра:„модель“.»

Итак, я могу передать модель в пользовательский интерфейс и представить ее в FormView в этом экземпляре, но я не могу передать модель обратно через JQuery или обратную передачу.

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

ответ

1

Если Ware будет работать с WebForms , вы должны привыкнуть к работе с моделью PostBack, или вы будете постоянно бороться с выбранным фреймворком.

Но вопрос под рукой, попробуйте следующее:

data: JSON.stringify({'model':params}) 
+0

Я просто пытаюсь это сейчас, но то, что я видел, с точки зрения постбэков я не видел ничего, что бы действовать в манере как я пытаюсь достичь этого, но видел, что мне нужно будет сделать это, посмотрев на «Request.Form ....» на каждый элемент, который будет таким же, как пропуск каждой переменной через jquery –

+0

, это сработало! Благодарю. –

+1

@SimonPrice Что касается комбинации веб-форм и привязки к моделям, я настоятельно рекомендую учебник по трем частям от ScottGu. Первая часть доступна [здесь] (https://weblogs.asp.net/scottgu/web-forms-model-binding-part-1-selecting-data-asp-net-vnext-series). – user1429080