1

検索ボタンから剣道グリッドを設定する必要があります。私は個人IDを書き、グリッドに他の情報を取得する必要がありますが、テキストボックスにIDを書き込んで検索をクリックすると、

「サーバーは要求を処理できませんでした。 ---> プロシージャまたは関数 'PROS_CRA_PUBLIC_GET_DOCUMENT_LIST_BY_PN' は、指定されていないパラメーター '@PN' を予期しています。」

コントローラ

public ActionResult Search(string personalID, [DataSourceRequest]DataSourceRequest request)
    {



        var serviceclient = new PersonalInfoServiceClient();
        DataSourceResult result = null;
        try
        {
            var items = serviceclient.GetRegistryInfoForPerson(personalID);
            result = items.ToDataSourceResult(request);

        }
        catch 
        {
            throw;
        }
        finally
        {
            serviceclient.Close();
        }

        return Json(result, JsonRequestBehavior.AllowGet);

    }

ビュー(一部)

 <div id ="search">
@using (Html.BeginForm("Search", "Main")){    
     <p> personal number: <input type="text" name="Searchtext" id="SearchString" /> <input type="submit" value="search" name="btnSearch" id="btnSearch" /></p> 
    }

<div id="civil">
@(Html.Kendo().Grid<PersonalIDCheckerMvCKendo.Models.PersInfo>()   
.Name("Grid")
.AutoBind(false)
.Columns(columns =>
{
    //columns//    })
.Groupable()
.Sortable()
.Scrollable()   
.Filterable()
.DataSource(dataSource => dataSource
    .Ajax()
    .Model(model => model.Id(c=> c.personalID))
    .Read(read => read.Action("Search", "Main").Data("test"))
)
)
</div>

<script>
$("#btnSearch").on('click', function test() {

console.log("click");
var searchText = $("#SearchString").val();

if (searchText == "") {

alert("You must enter a search value");
return;
}

$.ajax({
    url: '@Url.Action("Search","Main")',
    data: { personalID: searchText},
    type: 'POST',
    dataType: "json",
    success: function(result) {
var grid = $('#Grid').getKendoGrid(); 
grid.dataSource.data(result);
grid.refresh();
        }
    });
});
    </script>

モデル

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ServiceModel;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using DataAnnotationsExtensions;

namespace PersonalIDCheckerMvCKendo.Models
{
[DataContract(IsReference=true)]
public class PersInfo
{
    [DataMember]
    [DisplayName("Personal#")]
    public string personalID
    {
        get
        {
            return _PersonalID;
        }

        set
        {
            if (_PersonalID != value)
            {
                _PersonalID = value;
            }
        }
    }
    private string _PersonalID;

    [DataMember]
    [DisplayName("Name")]
    public string FirstName
    {
        get
        {
            return _FirstName;
        }

        set
        {
            if (_FirstName != value)
            {
                _FirstName = value;
            }
        }
    }
    private string _FirstName;

    [DataMember]
    [DisplayName("Lastname")]
    public string LastName
    {
        get
        {
            return _LastName;
        }

        set
        {
            if (_LastName != value)
            {
                _LastName = value;
            }
        }
    }
    private string _LastName;

//etc

ありがとう

4

2 に答える 2

1

personalIDを渡していません。

コントローラー関数に必要なデータを渡すための JavaScript 関数を追加します。たとえば、

function additionalData() {
    return {
        personalID: '@Model.personalID'
    };
}

次に、グリッドの DataSource を変更して、javascript 関数を使用します。

.DataSource(dataSource => dataSource.Ajax().ServerOperation(false)
    .Read(read => read.Action("Search", "Main")                                                                                      
    .Data("additionalData"))
)

また、

[DataSourceRequest]DataSourceRequest リクエスト

パラメーターは、コントローラー関数の最初に配置されます。たとえば、

public ActionResult Search([DataSourceRequest]DataSourceRequest request
                           , string personalID)

また、グリッドの列を返されたオブジェクトのプロパティにバインドしていることを確認してください (あなたの場合は PersonalIDCheckerMvCKendo.Models.PersInfo)。例えば

.Columns(columns =>
     {
          columns.Bound(pi => pi.Name);
          columns.Bound(pi => pi.Surname);
          // Some other columns.                                    
     })

*更新

あなたを支援するために、私は作業グリッドの例の 1 つを追加しました。これが私のグリッドです

@(Html.Kendo().Grid<ClientSearchResult>()
    .Name("Grid")
    .HtmlAttributes(new {style = "height:400px; cursor:pointer"})
    .DataSource(dataSource => dataSource.Ajax().ServerOperation(false)
        .Read(read => read.Action("RefreshGrid", "Client")                                                                                                 
        .Data("additionalData"))
        .PageSize(20)
    )
    .Columns(columns =>
    {
        columns.Bound(c => c.ClientId);
        columns.Bound(c => c.Name);
        columns.Bound(c => c.PolicyNumber);
        columns.Bound(c => c.ClaimNumber);
        columns.Bound(c => c.Status);
        columns.Bound(c => c.IsCompany);
    })
    .Pageable(page => page.Enabled(true).PageSizes(new[] {10, 20, 30, 40}))
    .Sortable(sorting => sorting.SortMode(GridSortMode.SingleColumn))
    .Scrollable()
    .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
    .Events(events => events.Change("grid_selected"))
)

私のJavaScript関数

function additionalData() {
    return {
        cellNumber: '@Model.CellNumber',
        name: '@Model.Name',
        policyNumber: '@Model.PolicyNumber',
        claimNumber: '@Model.ClaimNumber',
        brokerCode: '@Model.BrokerCode',
        brokerName: '@Model.BrokerName'
    };
}

そして私のコントローラー機能

public ActionResult RefreshGrid([DataSourceRequest] DataSourceRequest request
                                , string cellNumber, string name 
                                , string policyNumber, string claimNumber
                                , string brokerCode, string brokerName)
{
    if (cellNumber == string.Empty && name == string.Empty && policyNumber ==   
        string.Empty && claimNumber == string.Empty && brokerCode == string.Empty &&   
        brokerName == string.Empty)
            return Json(new List<ClientSearchResult>());
        else
        {
            List<ClientSearchResult> searchResult =   
            ClientMaintenance.ClientSearch(cellNumber, name, policyNumber, claimNumber,        
                                           brokerCode, brokerName).ToList();
            var result = searchResult.ToDataSourceResult(request);
            return Json(result);
        }
}
于 2013-11-07T12:41:43.037 に答える