糯米文學吧

位置:首頁 > 設計 > 網頁設計

ASP.NET 2.0 中跨網頁提交的方法有哪三種

當在一個

ASP.NET 2.0 中跨網頁提交的方法有哪三種

Web頁面中進行操作時,在默認情況下向當前頁進行提交。這種行為在出現之前並沒有什麼關係,但在中當我們想向另外一個Web頁提交一個Web

Form時該如何做呢?在1.0中這個問題變得很難解決,但在2.0中為開發人員提供了更容易的解決的技術:跨網頁提交。這種技術允許一個網頁在提交數據時提交給另外的一個頁面。在跨網頁提交中,用於初始化提交代碼的頁面叫源頁面,而客户提交的頁面叫目標頁面。

為了方便起見,目標頁面仍然獲得原頁面提交的所有數據。換名話説,從技術觀點出發,我們可以用同樣的方式處理其他頁面提交的數據。

這個新特性意味着2.0開發人員目前有三種可供選擇的技術來將數據從一個web頁面傳送到另外一個頁面。這三種方法是:響應重定向,服務端傳輸和新的跨網頁提交特性。我們可以已經熟悉前兩種技術了,因此,我們只是簡要地複習一下它們,然後我們會將主要精力放到學習如何使用跨網頁提交特性,以及闡述一下這種方法和響應重定向以及服務傳輸方式有什麼不同。

一、響應重定向方法

響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web服務器接到一個重定向請求後,它會將一個響應頭送給客户端,這將導致客户端發送一個新的請求到服務器。按句話説,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。

在中實現重定向很容易。下面的代碼演示瞭如何使用rect方法實現網頁重定向:

protected

void

Redirect_Click(object

sender,

EventArgs

e)

{

rect("");

}

要注意的是重定向請求只是一個GET請求,這就意味着我們不能從源頁中通過重定向命令提交數據。但是我們可以在重定向中使用查詢字符串來傳遞數據。如下面代碼所示:

protected

void

Redirect_Click(object

sender,

EventArgs

e)

{

rect("

));

}

上面的例子將一個查詢字符串作為參數傳遞給了rect方法的目標URL。我們可以通過如下的代碼獲得源數據。

protected

void

Page_Load(object

sender,

EventArgs

e)

{

string

userName

Request["userName"];

}

二、服務器傳輸方法

和依賴於客户端向另一個新頁發請求不同,服務器傳輸是一種服務器重定向技術,這種技術通過簡單的改變Web服務器所處理的代碼來達到請求一個新頁的目的。當被請求頁和源頁面在同一個服務器時,服務器傳輸要比rect方法更有效,這是由於這種技術可以避免額外的開銷,僅僅使用服務器的資源就可以進行重定向。要注意的這種技術有一個副作用,在頁面進行重定向時,客户端的URL仍然會保持源頁面的URL,這可能會使客户認為他們所獲得的數據是源頁面產生的。當然,在大多數情況下,這不是問題,但是這將使調試變得更困難。

sfer方法還可以保存初始頁的HttpContext。因此,目標頁可以訪問源頁面的值。我們可以使用FormsCollection屬性來從目標頁面中獲得源頁面的值。首先,要確定我們使用了被重載的方法,這個方法有兩個參數:目標URL和一個Boolean類型的值,告訴服務器是否保存用於描述源頁面值的Form。如下面的代碼所示:

[NextPage]

sfer("",true);

然後,我們在目標頁面中獲得一個叫txtUserName的Textbox控件的值的代碼如下:

object

obj

["txtUserName"];

三、rect和sfer的比較

由於rect方法要進行兩次請求響應操作,因此,我們應該在對性能要求高的網站儘量避免使用這種方法。然而,只從技術上説,使用redirect方式確實可以從一個網頁跳到另一個網頁。相比之下,sfer會更有效率,但是跳轉的範圍僅限於同一個Web服務器的不同網頁。從本質上説,我們可以使用sfer來消除不必要的請求響應操作。如果我們需要重定位到不同服務器的網頁,就需要使用rect方法。

四、跨頁提交概述

2.0中,我們可以通過實現IbuttonControl接口提交給不同的WebForm,來實現跨網頁的提交。和rect類似,跨網頁提交是一個基於客户端的傳輸機制,但也有點象sfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。

五、實現跨網頁提交

這部分將討論一下如何在2.0中實現跨網頁提交。為了開始我們的學習,假設有兩個Web頁,一個是源Web頁,另一個是目標Web頁。在源網頁中初始化了使用按鈕進行的跨網頁提交操作。我們首先必須設置目標網頁按鈕的PostBackUrl屬性,順便説一句,所有實現了tonControl接口的Web控件都有跨網頁提交的特性。下面的代碼將演示這一過程。

PostBackUrl="~/"

text

"Post

to

a

target

page"/>

當我們設置PostBackUrl屬性時,框架將相應的控件綁定到一個新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產生的Html代碼如下:

onclick="javascript:WebForm_DoPostBackWithOptions(

new

WebForm_PostBackOptions("btnSubmit",

false,

"",

false,

false))"

id="btnSubmit"

/>

對於上面的html代碼來説,當用户單擊按鈕時,瀏覽器將提交目標URL(),而不是源URL。

六、從目標頁面中獲得源頁面控件的值

2.0提供了一個叫PreviousPage的新的屬性,這個屬性無論在何時當前頁面進行跨網頁提交操作時都會指向源頁面。要注意的是,當源頁面和目標頁面在不同的應用程序中時,這個屬性包含null(這個null並不是未初始化的意思)。還有要注意的是當目標網頁訪問PreviousPage屬性時可以獲得源頁面的數據,運行時裝載並執行了源頁面。這將引發ProcessChildRequest事件的發生。而且,它還會引發Page_Init事件、Page_Load和任何其他的源頁面按鈕單擊事件。

因此,我們要避免由於不小心進行誤操作,所以最好通過IsCrossPostBack屬性來確認是否為一個跨網頁提交發生,如果這個屬性值為true,那麼目標網頁就是通過一個跨網頁提交動作而調用的。如果是通過另外一種方式調用的(如一般的請求、rect或是一個sfer),這個屬性的值為false。下面的例子演示瞭如何使用這個屬性。

if

ossPagePostBack)

{

//執行代碼

}[NextPage]

這個PreviousPage屬性在sfer和跨網頁提交中都可以使用。在2.0中,我們可以在調用sfer操作後使用PreviousPage屬性在目標頁面中來獲得源頁面的數據,代碼如下:

{

sfer("");

}

protected

void

Redirect_Click(object

sender,

EventArgs

e)

在這個接收面中我們現在可以獲得Web頁面的數據,代碼如下:

protected

void

Page_Load(object

sender,

EventArgs

e)

{

if

(PreviousPage

null)

{

TextBox

txtBox

(TextBox)

Control("txtUserName");

if

(textBox

null)

string

userName

;

//其他可執行的代碼

}

}

要注意的是上面的代碼必須將txtUserName控件轉換為TextBox類型,以便可以訪問其中的值。

七、使用PreviousPageType

PreviousPageType屬性提供了在跨網頁操作中訪問源頁面的強類型能力,下面讓我們演示一下如何不通過任何類型轉換來從源頁面中獲得控件值。代碼如下:

<

asp:Textbox

ID="txtUserName"

Runat="server"

/>

<

asp:Textbox

ID="txtPassword"

Runat="server"

/>

<

asp:Button

ID="Submit"

Runat="server"

Text="Login"

PostBackUrl=""

/>

要注意的是單擊按鈕可以重定向到一個叫“”的目標頁。這個目標頁可以使用如下的代碼獲得用户名和密碼:

八、保存視圖狀態

對於跨網頁提交來説,2.0

內嵌了一個叫__POSTBACK的隱藏字段,這個字段包含了關於源頁面的視圖信息

也就是由源頁面提供了,包含了一個帶有一個非空PostBackUrl屬性值的服務端控件。目標頁可以使用__POSTBACK中的信息來獲得源頁面的視圖狀態信息。代碼如下:

if(PreviousPage!=null

&&

ossPagePostBack

&&

lid)

{

TextBox

txtBox

Control("txtUserName");

e();

}

在上面的代碼中核對了用於確保PreviousPage屬性不為null的檢查代碼。順便提一下,如果目標頁和源頁面不在同一個應用程序中,這個PreviousPage屬性的值為null。只有在進行跨網頁提交操作時,IsCrossPagePostBack屬性才為true。

這個跨網頁提交的特性,是2.0中最強有力的特性之一,這種技術將允許在一個頁面中提交到另外一個頁面,並且可以在目標頁面地無縫地操作源頁面中的數據。

2.0 權限樹的控制

做權限的時候,主要實現如下功能

1、該節點可以訪問,則他的父節點也必能訪問;

2、該節點可以訪問,則他的子節點也都能訪問;

3、該節點不可訪問,則他的子節點也不能訪問。

使用帶CheckBox的數型結構能得到很好的用户體驗,可是編程的難度也是有點增加,如果全部有服務端來完成,那點下刷下,肯定不行,只能使用javascript,javascript調試的時候鬱悶的很,一個字類,還有鬱悶的遞歸,麻煩

我以前是使用以下該方法

<script

language="javascript">

//oncheck事件

function

tree_oncheck(tree)

{

var

i;

var

node=reeNode(kedNodeIndex);

var

Pchecked=reeNode(kedNodeIndex)ttribute("checked");

setcheck(node,Pchecked);

setParent(node,Pchecked);

//t(Pchecked);

e

if

(hildren()th

>

0)

{

for

(i=0;i<=hildren()th-1;i++)

{

if

(hildren()[i]ttribute("Checked"))

{

AddChecked(hildren()[i]);

}

FindCheckedFromNode(hildren()[i]);

}

}

}

//設置子節點選中

function

setcheck(node,Pchecked)

{

var

i;

var

ChildNode=new

Array();

ChildNode=hildren();

if(parseInt(th)==0)

{

return;

}

else

{

for(i=0;i<th;i++)

{

var

cNode;

cNode=ChildNode[i];

ttribute("Checked",Pchecked);

//ked

Pchecked;

if(parseInt(hildren()th)!=0)

{

setcheck(cNode,Pchecked);

}

}

}

}

//設置子節點選中/取消;

//同時需要設置父節點的狀態(如果是取消選中的話,僅僅設置本節點及其所有字接點,不涉及父接點)

function

setParent(node,Pc)

{

var

parentNode

arent();

if(parentNode)

{

var

parentNodeFather

arent();

if(parentNodeFather)

{

setParent(parentNode,Pc);

}

if(Pc)

{ttribute("checked",Pc);}

else

{

checkBrother(parentNode,Pc,ttribute("NodeData"))

}

}

}

//檢查子接點是否有選擇的,如果有一個選擇了,那返回true

//只查第一級節點.

function

checkBrother(parentNode,Pc,NodeData)

{

var

childNodes

new

Array();

childNodes

hildren();

if(th

>0)

{

var

bChecked

true;

for(var

i=0;i<th;i++)

{

if(childNodes[i]ttribute("checked")

true

&&

childNodes[i]ttribute("NodeData")

NodeData)

{

//alert(i+childNodes[i]ttribute("Text"));

bChecked

false;

break;

}

}

if(bChecked)

{

ttribute("checked",Pc);

}

else

{

//所有父結點選擇

setParent(parentNode,!Pc)

}

}

else

{

ttribute("checked",Pc);

}

}

//獲取所有節點狀態

function

FindCheckedFromNode(node)

{

var

i

0;

var

nodes

new

Array();

nodes

hildren();

for

(i

0;

i

<=

th

1;

i++)

{

if

(nodes[i]ttribute("Checked"))

{

AddChecked(nodes[i]);

}

if

(parseInt(nodes[i]hildren()th)

{

FindCheckedFromNode(nodes[i]);

}

}

}

//添加選中節點

function

AddChecked(node)

{

e

ttribute("NodeData")

}

//-->

這種方法有個很大的問題,就是他客户端設置的CheckBox在服務器端是不能獲取的,現在只能在Check的時候遍歷樹,並把Checked的值放在一個文本里,然後提交到服務器,然後服務器來解析1@2@這種字符

現在我使用的是2.0,使用的是以下的方法

function

public_GetParentByTagName(element,

tagName)

{

var

parent

ntNode;

var

upperTagName

perCase();

//如果這個元素還不是想要的tag就繼續上溯

while

(parent

&&

(perCase()

upperTagName))

{

parent

ntNode

ntNode

ntElement;

}

return

parent;

}

//設置節點的父節點Cheched——該節點可訪問,則他的父節點也必能訪問

function

setParentChecked(objNode)

{

var

objParentDiv

public_GetParentByTagName(objNode,"div");

if(objParentDiv==null

objParentDiv

"undefined")

{

return;

}

var

objID

ttribute("ID");

objID

tring(0,xOf("Nodes"));

objID

objID+"CheckBox";

var

objParentCheckBox

lementById(objID);

if(objParentCheckBox==null

objParentCheckBox

"undefined")

{

return;

}

if(ame!="INPUT"

&&

"checkbox")

return;

ked

true;

setParentChecked(objParentCheckBox);

}

//設置節點的'子節點uncheched——該節點不可訪問,則他的子節點也不能訪問

function

setChildUnChecked(divID)

{

var

objchild

dren;

var

count

th;

for(var

i=0;i<th;i++)

{

var

tempObj

objchild[i];

if(ame=="INPUT"

&&

"checkbox")

{

ked

false;

}

setChildUnChecked(tempObj);

}

}

//設置節點的子節點cheched——該節點可以訪問,則他的子節點也都能訪問

function

setChildChecked(divID)

{

var

objchild

dren;

var

count

th;

for(var

i=0;i<th;i++)

{

var

tempObj

objchild[i];

if(ame=="INPUT"

&&

"checkbox")

{

ked

true;

}

setChildChecked(tempObj);

}

}

//觸發事件

function

CheckEvent()

{

var

objNode

lement;

if(ame!="INPUT"

!="checkbox")

return;

if(ked==true)

{

setParentChecked(objNode);

var

objID

ttribute("ID");

var

objID

tring(0,xOf("CheckBox"));

var

objParentDiv

lementById(objID+"Nodes");

if(objParentDiv==null

objParentDiv

"undefined")

{

return;

}

setChildChecked(objParentDiv);

}

else

{

var

objID

ttribute("ID");

var

objID

tring(0,xOf("CheckBox"));

var

objParentDiv

lementById(objID+"Nodes");

if(objParentDiv==null

objParentDiv

"undefined")

{

return;

}

setChildUnChecked(objParentDiv);

}

}這種方法最大的好處就是服務端能得javascript設置的Checked的值,不用沒點下就全部把樹遍利下,直接在服務端遍利一次就行了

//遍歷子節點

public

void

GetChildNode(TreeNode

Node)

{

foreach

(TreeNode

node

in

dNodes)

{

if

(ked)

{

StrChecked

e+"@";

}

GetChildNode(node);

}

}

我照樣能得到它的Check的值

2.0中XML數據的處理

SqlDataSource和ObjectDataSource控件都是平面表格式的數據源控件,操作也相對簡單,在這裏我就不細説了.

在這裏我主要談下用於連接XML文件的XmlDataSource和用於連接站點導航數據的SiteMapDataSource這兩個層次數據源控件中XmlDataSource數據綁定到平面表格控件的一起東東.

XmlDataSource控件允許其它控件綁定到XML數據。XmlDataSource支持DataFile屬性,它被用於指定作為輸入(input)的XML數據文件的路徑。你還可以指定TranformFile屬性,給數據應用XSLT轉換;設置XPath屬性來指定需要暴露的數據源節點的子集。

<asp:XmlDataSource

ID="myXmlDataSource"

runat="server"

DataFile="~/"

TransformFile="~transXml"

XPath="//User">

表格式數據綁定控件綁定到分層數據源也是可行的,但是它只能顯示第一層數據。在下面的demo中,Repeater控件綁定到

文件。由於數據源暴露的頂層節點是<User/>節點,Repeater可以在自己的ItemTemplate模板中使用Eval數據綁定語法綁定到這些節點的屬性。

<asp:Repeater

runat="server"

ID="myReater2"

DataSourceID="myXmlDataSource">

標題

姓名:<%#

Eval("Name")

%>

Email:<%#

Eval("Email")

%>

除了Eval數據綁定語法之外,

2.0還提供了基於XPath的數據綁定語法,在實現了IXPathNavigable接口的任何數據項上都可以使用它。這裏介紹兩種常用的表達式類型:

XPath(expression,

[formatString])

根據數據項計算Xpath表達式的值,返回單個值。

XPathSelect(expression,

[formatString])

根據數據項計算Xpath表達式的值,返回節點列表。

下面我們來看看使用Xpath數據綁定方法的優勢,通過一個demo來説明.

Repeater的ItemTemplate模板另外增加了一個Repeater,並把這個內部Repeater的屬性綁定到一個描述當前User節點的Reply子節點的XPathSelect表達式。在內部Repeater的ItemTemplate模板中,Xpath數據綁定表達式根據這些"Reply"內容節點來計算值。

2.0利用這種技術,使你能夠通過組合表格式數據綁定控件簡便地構造出豐富的、分層的數據顯示方式。

<asp:Repeater

runat="server"

ID="myRpeater"

DataSourceID="myXmlDataSource">

標題

ID:<%#

XPath("@ID")

%>

姓名:

Email:

Content:

<asp:Repeater

runat="server"

ID="childRepeater"

DataSource='<%#

XPathSelect("Reply")

%>'>

留言

ReplyID:<%#XPath("ID")

%>

Time:<%#

XPath("Time")

%>

Content:<%#

XPath("Content")

%>

使用 2.0中的ReportViewer控件

介紹

任何數據驅動型的應用程序都有一個普遍的需求,那就是報表。

但是,在

1.x中並沒有給我們提供這個非常重要的特性。

然而很幸運的是,伴隨着。NET

2.0而來的ReportViewer控件可以滿足你對報表的一些基本需求。

我將會在本文中向你演示如何使用這個控件。

ReportViewer控件既可以在web程序中使用,也可以在windows程序中使用。

在這裏,我將只介紹如何在web程序中使用它。

報表示例

我們假設要生成一個如下所示的顧客信息列表:

上面的報表是一個非常簡單的以國家分組的顧客信息列表。

報表的數據是從Northwind數據庫的Customers表裏獲取的。

默認情況下,它會顯示所有的顧客信息。

但是,你也可以讓它顯示屬於你指定的某個國家的顧客信息。

該報表是使用ReportViewer控件設計的,它可以從強類型的DataSet中或者自定義的對象集合中獲取數據。

在實際的程序開發中,我們往往會使用3層架構,數據的獲取經常會是從業務層取得的DataSet或一個泛型集合。

在這裏,我打算使用一個泛型集合作為數據源,而不是強類型的DataSet.

創建類庫

首先,打開Visual

Studio,然後創建一個名為ReportViewerLib的類庫項目。

添加一個如下所示的名為Customer的類:

using

System;using

;using

iguration;using

lient;using

ric;namespace

ReportViewerLib{

public

class

Customer

{

public

string

strCustomerID;

public

string

strCompanyName;

public

string

strContactName;

public

string

strCountry;

public

string

CustomerID

{

get

{

return

strCustomerID;

}

set

{

strCustomerID

value;

}

}

public

string

CompanyName

{

get

{

return

strCompanyName;

}

set

{

strCompanyName=

value;

}

}

public

string

ContactName

{

get

{

return

strContactName;

}

set

{

strContactName=

value;

}

}

public

string

Country

{

get

{

return

strCountry;

}

set

{

strCountry=

value;

}

}

public

static

List

GetCustomersForCountry(string

country)

{

SqlConnection

cnn=new

SqlConnection(

ectionStrings["NorthwindConnectionString"]ectionString);

SqlCommand

cmd=new

SqlCommand();

ection=cnn;

andText="select

CustomerID,CompanyName,ContactName,Countryfrom

customers

where

country=@country";

SqlParameter

p=new

SqlParameter("@country",country);

(p);

();

SqlDataReader

reader

uteReader();

List

list

new

List();

while

(())

{

Customer

c

new

Customer();

omerID

tring(0);

anyName

tring(1);

actName

tring(2);

try

tring(3);

(c);

}

e();

return

list;

}

public

static

List

GetAllCustomers()

{

SqlConnection

cnn

new

SqlConnection(

ectionStrings

["NorthwindConnectionString"]ectionString);

SqlCommand

cmd

new

SqlCommand();

ection

cnn;

andText

"select

CustomerID,CompanyName,ContactName,Country

from

customers";

();

SqlDataReader

reader

uteReader();

List

list

new

List();

while

(())

{

Customer

c

new

Customer();

omerID

tring(0);

anyName

tring(1);

actName

tring(2);

try

tring(3);

(c);

}

e();

return

list;

}

}}

123456下一頁

GOvar

pager=new

iwmsPager(1,6,true);

[新品]指紋私密 CECT超薄手寫S10低價到貨! 01-08 -

指紋手機,這一新興的手機功能在CECT

T100的強勢上市後被廣大機友所熟知並喜愛起來,而藉着這順風順水的人氣,CECT又推出了一款指紋安全手機S10,它可以輕鬆實現六大指紋安全功能:指紋加密、指紋隱形、指紋防盜、指紋鼠標、指紋撥號和指紋動作。而CECT

S10的整體表現會不會如T100一樣帶給我們無限驚喜呢?請機友們跟隨汀汀的文字一起去解一下吧,説不定你會在瞬間選中它!

作為熱賣機型CECT

T100的升級版本,CECT

S10在外形上略作修改,但更顯精練輕巧,商務氣息依然濃郁。而直板PDA手機風格造型的S10三圍尺寸為113×54×11mm,做工精良,超薄的機身秀氣中不乏端莊。屏幕方面,CECT

S10擁有一塊26萬色的TFT屏幕,分辨率為目前主流的320*240像素QVGA分辨率,採用觸摸式設計,支持手寫、鍵盤雙輸入方式,並支持大字體撥號。

娛樂方面,CECT

S10具有實時流媒體播放,MP3和MP4播放器,錄音機、卡拉OK等功能,而內置的任天堂遊戲模擬器,附送遊戲高達2000個。在攝像頭方面,S10內置130萬像素CMOS攝像頭,最大支持640*460分辨率的照片拍攝,支持數碼變焦、三種照片質量等拍攝模式,並支持有聲視頻拍攝!此外,CECT

S10還能方便上網和收發電子郵件,內置資訊時空包括SMS、MMS、IVR、WAP四大類約160個應用。同時,S10還支持大容量T-FLASH擴展存儲卡,並可做U盤使用。

強大的指紋識別和保密功能是CECT

S10的突出特色,它通過指紋加密、指紋隱形、指紋防盜、指紋鼠標、指紋撥號和指紋動作這些功能巧妙地把私密信息保護、通信信息隱藏、通信人身份隱藏與快捷操作方式相結合,使用起來不僅令人放心而且舒心,不會擔心因不慎導致的個人信息泄露。另外,S10的電話簿容量為1000個,可以多種方式進行索引,支持羣組功能,短信息容量高達400條,足以保留足夠多的個人短息和商務短信。

縱觀CECT

S10的整體表現,它的主要賣點是集中在QVGA分辨率的26萬色TFT屏幕、支持手寫鍵盤雙輸入、娛樂遊戲擴展功能以及最為可圈可點的指紋識別和保密功能。而以上的這些賣點再配以目前北斗手機網699元的售價就更是划算至極了,喜歡的機友沒有理由不選它哦!

[新品]拍照新旗艦 500W索愛K858c盛情上市! 01-08 -

拍照手機的迅猛發展是時代大環境所需,同時也出乎了很多人的意料!如今200萬像素已經成為了新機上市的家常便飯,320萬像素可以和主流手機貼貼邊,500萬像素才是真正的大勢所趨!在看過了其它廠家的500W像素新機上市後,索尼愛立信Cyber-shot品牌下的拍照悍將K858c也終於閃亮登場了,歡迎已經迫不急待想熟知它一切功能的機友和汀汀一起對K858c來個從頭至尾的瞭解,它的強大功能定會令你不由自主的傾心於它!

索愛K858c採用索愛最拿手的直板式造型設計,機身線條筆直硬朗,酷勁十足,尤其是採用黑色為主色調更增強了它的視覺衝擊力。在色彩搭配選擇上,除了經典的黑色外,K858c的功能鍵、鏡頭部分和LOGO標籤都是採用銀色點綴,再配上眩目的綠色方向導航鍵和機身周邊裝飾條,非常惹眼。屏幕方面,K858c採用了一塊2.2英寸的26萬色TFT顯示屏幕,分辨率達到了QVGA級別(240×320像素)。依照索尼愛立信公司的一貫作風,K858c的屏幕顯示非常優秀,畫面細膩度和文字鋭度表現得近乎完美。

索愛K858c的背面設計融入了相機血統,採用雙面卡片DC設計原則,所配備的500萬像素鏡頭支持自動對焦、氙氣閃光燈、16倍數碼變焦等豐富影像功能,完全採用Cyber-shot數碼相機的操作界面,影像菜單比以往更加直觀,DC感更加強烈。另外,Best

Pic、Photo

fix等優化軟件的運用也令照片趨於完美。

索愛K858c內置MP3播放器具備WALKMAN獨有的Mega

Bass音效,支持藍牙2.0,A2DP標準,配合高質量藍牙立體聲耳機,效果震憾。此外,K858c除了擁有40MB機身內存外,還創造了一個行業第一,它不僅支持M2卡,同時還支持Micro

SD卡的擴展,而且兩個存儲卡的擴展都使用一個插槽,不同的只是插卡的方向。

這一場由索愛K858c所引爆的拍照風潮正向我們襲來,它的整體表現足以成為拍照手機領域裏的新旗艦,並有能力與其它各大品牌的500萬像素手機相抗衡!北斗手機網4280元的上市售價也算厚道,歡迎有實力嚐鮮的機友們先用為快,來體驗一下K858c所釋放出來無窮魅力!

標籤:aspnet 網頁 提交